git merge
명령어는 기준 브랜치가 다른 브랜치의 커밋을 참조하는 방법이다. git merge는 어떻게 동작할까? Git은 merge 명령어를 실행하면, 두 브랜치의 최소 공통 조상을 자동으로 찾는다. 최소 공통 조상의 케이스에 따라 Git은 merge하는 방법이 달라진다.
Case1: 참조할 브랜치가 기준 브랜치의 Upstream 브랜치인 경우
로컬 브랜치는 develop이며, feature 브랜치는 develop 브랜치에서 하나의 커밋이 앞선 상태이다. 이 상태에서 git merge feature
를 입력하면, Git은 develop 브랜치와 feature 브랜치의 최소 공통 조상을 develop으로 판단한다. feature 브랜치는 develop 브랜치의 Upstream 브랜치이므로, 이 경우에는 develop 브랜치가 C3를 가리키게 된다. 이와 같은 merge 방법을 Fast-forward merge 라고 한다. Fast-forward merge는 별도로 추가 머지 커밋을 생성하지 않는다.
Case2: 참조할 브랜치가 기준 브랜치의 Upstream 브랜치가 아닌 경우
로컬 브랜치는 feature1이며, develop 브랜치를 기준으로 feature1, feature2 브랜치가 생성된 상태이다. 이 상태에서 git merge feature2
를 입력하면, Git은 최소 공통 조상을 develop으로 판단한다. 위 경우와 달리 feature2는 feature1의 Upstream 브랜치가 아니다. 이 경우에는 feature1과 feature2의 최신 브랜치를 가리키는 머지 커밋 C5
가 생성된다. C5
는 feature1의 최신 커밋 C3, feature2의 최신 커밋 C4를 각각 가리킨다. 참고로, 만약에 C3과 C4에서 동일한 파일을 수정했다면 충돌(conflict)이 발생한다.
요약
Fast-forward
는 Upstream 브랜치의 커밋으로 이동하고, 머지 커밋을 생성하지 않는다.3-way merge
는 두 브랜치의 최신 커밋을 가리키는 머지 커밋을 생성한다.
댓글