JAN's History

Git Merge(3-way merge) 알아보기 본문

협업

Git Merge(3-way merge) 알아보기

JANNNNNN 2025. 10. 19. 15:39

1. Fast-foward merge

master 브랜치에서 dev1이 분기해 나가는 지점(commit), 즉 두 브랜치가 공통으로 가지고 있는 commit을 base라고 한다. 그런데 master와 dev1이 각각 참조하는 commit은 동일 선상에 위치하고 있다. 이 때 두 브랜치는 Fast-foward 상태에 있다고 한다.

fast-forward 관계에 있는 브랜치를 관계에서 git merge 명령을 입력하면 새로운 commit이 생기지 않는다. 뒤에 쳐진 브랜치(여기서는 master)의 참조 개체가 앞서있는 브랜치가 가리키는 개체를 참조하도록 이동할 뿐이다. 마치 브랜치가 점프 하듯 상대 브랜치 참조 값으로 이동하는 모습을 본따서 fast-forward(빨리감기)라고 불린다.

2. 3-way merge

이제 아래 그림과 같은 경우를 생각해보자. 두 브랜치 모두 base에서 commit을 진행해서 분기해 나간 상태가 되었다. 두 브랜치 중 어느 것도 base에 위치하지 않는다.

이 처럼 두 브랜치가 base에서 분리된 commt을 참조할 때 git merge 명령을 실행하면 새로운 commit이 생성된다. 이와 같은 merge를 3-way merge 라고 한다. 3-way로 불리는 이유는 내용을 병합할 때, base와 각 브랜치 2개가 참조하는 commit을 기준으로 병합을 진행하기 때문이다.

참 고 : 3-way merge의 원리

앞에서 3-way merge를 진행할 때 base와 각 브랜치가 참조하는 commit을 고려하여 자동 병합을 진행한다고 했다. merge 명령은 base를 기준으로 변경사항이 있는 파일들을 merge commit에 반영한다. 그런데 만약에 두 commit 모두에서 변경사항이 발생한 파일에 대해서는 충돌(conflict)이 발생한다. 충돌이 발생하면 04-03에 설명한대로 해당 파일의 충돌을 해결 한 후 commit하면 된다.

 

'협업' 카테고리의 다른 글

git pull=git fetch+git merge  (0) 2025.10.03
git rebase 와 git merge의 차이점  (0) 2025.09.29