-
Git - branchStudy/Git 2020. 3. 2. 15:27
branch?
branch: 작업을 나누고 합치기 위함
branch를 만든다: 작업이 분기되는 현상
새로운 branch/원래 하던 작업 branch
branch 만들기
git branch "branch 이름"
"branch 이름" => 보통 접두사를 쓰는데, 조직이나 개인에 맞추어 결정할 것
git branch: 브랜치들을 볼 수 있음, 현재 사용중인 브랜치도 확인 가능
git branch를 입력했을 때 현재는 master를 사용중
git checkout exp: 현재 쓰고 있는 브랜치를 나가고 exp라는 브랜치를 사용하겠다.
ls -al과 git log를 사용해서 확인해보면
master일 경우와 exp일 경우에 결과가 동일하다.
branch를 생성하면 그 생성한 브랜치는 현재 속해있는 브랜치의 상태를 그대로 복사하기 때문exp에서 f1글을 수정한 뒤 확인해보면
exp에서는 글이 수정되어있고, master에서는 글이 수정되어있지않음.
branch 정보확인
git log --branches --decorate
브랜치별로 log확인
(master)라고 적힌 것이 master 브랜치의 가장 최근 commit
(HEAD -> exp)라고 적힌 것은 exp 브랜치의 가장 최근 commit, HEAD는 현재 exp 브랜치에 체크아웃되었다란 뜻
git log --branches --decorate --graph
master와 exp가 각자의 길을 걷고 있을 때 활용하기 좋음
exp브랜치는 최신 커밋이 3 이전 2 이전 1, master 브랜치는 최신 커밋이 5 이전이 2
두 브랜치는 같은 2에서 나뉘어 진것
git log --branches --decorate --graph --online
한줄로 간편하게 알려줌
git log master..exp: 버전과 버전 사이의 차이점을 알고 싶을 때, master에는 없고 exp에는 있는 것
git log -p master..exp
: -p를 입력하면 소스 코드의 차이도 알 수 있음
git diff master exp: 각각의 브랜치에 현재의 상태들을 비교
앞에 있는 게 master 뒤에 있는게 exp
branch 병합
exp => master: master로 체크아웃 해야 함
git checkout master
git merge exp하면 창이뜨고 :wq눌러 종료하면 merge 됨
master로 합쳐지고 두개의 부모 commit을 가짐
exp를 master와 똑같이 만들려고 함. 위에처럼 해서 merge함
exp branch 삭제
git checkout master
git branch -d exp: exp를 d(delete)함
=> (HEAD -> master)라고 뜨는 거 확인 가능
branch 수련
https://git-scm.com/book/en/v2/ - 영어
https://git-scm.com/book/ko/v2 - 한국어
git 홈페이지에 들어가서 documentation에 들어가서 Book을 클릭하면 책을 오픈소스로 만들어 둠.
쉽게 공부할 수 있음
ex) 3.2
$ git checkout -b iss53: iss53이라는 브랜치를 만들고 iss53에 체크아웃한다.
Fast-forward: 빨리감기. 별도의 commit을 생성하지 않고 가리키는 commit만 변경.(페이지 들어가서 그림과 함께 이해)
Merge made by the 'recursive' strategy.: 독립한 브랜치가 원래 브랜치로 돌아갈 때 원래 브랜치가 변경되어 있을 때는 fast-forward를 할 수 없음. 공통의 조상을 찾은 뒤 merge하여 별도의 commit을 만들어 두개의 조상을 가짐.
branch 충돌해결
브랜치간 파일이 같을 경우 충돌 발생.
같은 파일이어도 수정한 위치가 다르면 자동으로 merge가능
같은 부분을 수정하였을 때 문제 발생
Auto-merging
git status입력했을 때 both modified라도 뜸(둘 다 수정하였다.)
vim 충돌된 파일을 수정
<<<<<<head : 현재 체크아웃되어있는 부분 수정사항
=========: 아래있는 부분은 충돌이 일어나는 부분
>>>>>>>branch
이 두 공간 사이를 잘 정리해서 충돌 해결
Stash
stash( Stash the changes in a dirty working directory away)
: 작업중이던 파일을 임시로 저장해두고 현재 브랜치의 상태를 마지막 커밋을 상태로 초기화 할 수 있음
commit을 하기엔 애매(작업이 끝나지 않음)한데 checkout을 해야할 때 stash로 숨길 수 있음
stash: 감추다, 숨겨두다
git stash
or
git stash save
다시 작업을 시작할 때
git stash apply: 가장 최근 stash 적용, git reset -- hard한 것도 다시 복원 가능
git reset -- hard: 최근 commit 상태로 이동
git stash list: stash를 최근 순으로 볼 수 있음
git stash drop: 가장 최근 stash 삭제
git stash apply; git stash drop: 가장 최근 stash 적용 후 삭제
=> git stash pop
추적되는 파일과 추적되지 않은 파일이 있을 경우
추적되고 있는 파일(버전 관리되고 있는 파일)만 stash된다.
'Study > Git' 카테고리의 다른 글
Git - tag (0) 2020.03.03 원격저장소(Remote Repository) - Github (0) 2020.03.02 Git의 원리 (0) 2020.03.02 Git - 명령의 빈도와 메뉴얼 보는 방법 (0) 2020.03.02 Git - 과거 버전으로 돌아가기 (0) 2020.03.02