본문 바로가기

[Git Merge] Fast-forward vs 3-way merge

by mugglim 2022. 11. 6.

git merge 명령어는 기준 브랜치가 다른 브랜치의 커밋을 참조하는 방법이다. git merge는 어떻게 동작할까? Git은 merge 명령어를 실행하면, 두 브랜치의 최소 공통 조상을 자동으로 찾는다. 최소 공통 조상의 케이스에 따라 Git은 merge하는 방법이 달라진다.

Case1: 참조할 브랜치가 기준 브랜치의 Upstream 브랜치인 경우

merge 전

로컬 브랜치는 develop이며, feature 브랜치는 develop 브랜치에서 하나의 커밋이 앞선 상태이다. 이 상태에서 git merge feature를 입력하면, Git은 develop 브랜치와 feature 브랜치의 최소 공통 조상을 develop으로 판단한다. feature 브랜치는 develop 브랜치의 Upstream 브랜치이므로, 이 경우에는 develop 브랜치가 C3를 가리키게 된다. 이와 같은 merge 방법을 Fast-forward merge 라고 한다. Fast-forward merge는 별도로 추가 머지 커밋을 생성하지 않는다.

merge 후

Case2: 참조할 브랜치가 기준 브랜치의 Upstream 브랜치가 아닌 경우

merge 전

로컬 브랜치는 feature1이며, develop 브랜치를 기준으로 feature1, feature2 브랜치가 생성된 상태이다. 이 상태에서 git merge feature2를 입력하면, Git은 최소 공통 조상을 develop으로 판단한다. 위 경우와 달리 feature2는 feature1의 Upstream 브랜치가 아니다. 이 경우에는 feature1과 feature2의 최신 브랜치를 가리키는 머지 커밋 C5가 생성된다. C5는 feature1의 최신 커밋 C3, feature2의 최신 커밋 C4를 각각 가리킨다. 참고로, 만약에 C3과 C4에서 동일한 파일을 수정했다면 충돌(conflict)이 발생한다.

merge 후

요약

  • Fast-forward는 Upstream 브랜치의 커밋으로 이동하고, 머지 커밋을 생성하지 않는다.
  • 3-way merge는 두 브랜치의 최신 커밋을 가리키는 머지 커밋을 생성한다.

댓글