본문 바로가기
Git

Git Branch(2)

by oncerun 2021. 2. 11.
반응형

브랜치와 Merge의 기초

 

작업하는 프로젝트에서 이전 master 브랜치에 커밋을 몇 번 했다고 가정하고, 

이슈가 발생해 30번 이슈를 처리하는데 집중하기 위한 브랜치를 하나 만든다.

이때 브랜치를 만들면서 브랜치를 옮기려면 다음과 같은 옵션을 추가한다.

git branch -b issue30

뭔가 커밋하면 브랜치는 해당 브랜치는 앞으로 나아간다.

다음 로그를 보면 issue30브랜치는 앞으로 나아갔고 master브랜치는 가만히 있고 testing브랜치는 갈라졌다.

 

testing 브랜치에서 새로운파일을 추가한 상태로 master브랜치와 합치려고 한다.

master브랜치에 들어가 testing과 merge 해보자

 

Fast-forward라는 글자가 보이는가? 이 testing 브랜치가 가리키는 커밋이 마스터 브랜치 커밋에 기반한 브랜치이기 때문에 브랜치 포인터는 Merge 과정 없이 그저 최신 커밋으로 이동한다. 이런 Merge방식을 Fast-forward라고 부른다.

즉 master브랜치가 testing 브랜치가 가리키는 커밋으로 이동했다.

이제 testing 브랜치는 필요가 없다. -d옵션을 주고 삭제한다.

 

자 이제 issue30이 완료됐고 testing도 master에 merge 했으니 두 브랜치를 합쳐보자.

무언가 메시지가 다르다. 그 이유는 현재 브랜치가 가리키는 커밋이 Merge 할 브랜치의 조상이 아니므로 git은 fast-forward로 Merge하지 않는다. 이 경우에는 git은 각 브랜치가 가리키는 커밋 두 개와 공통 조상 하나를 사용해서 

3-way-merge를 한다.

 

단순히 브랜치 포인터를 최신 커밋으로 옮기는 것이 아니라 3-way-Merge의 결과를 별도의 커밋으로 만들고 나서 해당 브랜치가 그 커밋을 가리키도록 이동시킨다. 

 

가끔씩 이 3-way Merge가 실패할 때도 있다. Merge 하는 두 브랜치에서 같은 파일의 한 부분을 동시에 수정하고 Merge 하면 Git은 해당 부분을 Merge하지 못한다.  이때 어떤 파일을 Merge하지 못했는지는 git status명령어로 알 수 있다.

반응형

'Git' 카테고리의 다른 글

Git Branch(4)  (0) 2021.02.11
Git Branch(3)  (0) 2021.02.11
Git Branch  (0) 2021.02.11
Git 기초 명령어(3)  (0) 2021.02.10
Git 기초 명령어(2)  (0) 2021.02.10

댓글