
앞선 글을 통해 merge에 대해 잠시 언급한 바 있다. 오늘은 여기서 더 나아가 merge의 두 가지 타입인 Fast-forward merge와 3-way merge에 대해 자세히 알아보고자 한다.
이번 글은 통해 Git Merge의 2가지 타입인 Fast-forward Merge와 3-way merge에 대해 더 깊이 있게 학습해보며 Git Merge에 대해 완벽하게 알아보자.
현재 브랜치를 A브랜치, 병합하고 싶은 브랜치를 B브랜치라고 가정하자.
fast-forward 방법은, branch간의 merge를 진행할 때 A 브랜치의 Head Commit이 B 브랜치의 Head commit으로 이동되는 방식이다.

위 그림은 Fast-forward Merge의 대표적인 예를 그림으로 나타낸 것이다. 예를 들어, 만약 main 브랜치에서 git merge premium을 실행한다고 치자. 이 경우, premium 브랜치가 가리키던 커밋을 main 브랜치도 가리키게 되는 것이다. 이때 새로운 커밋은 생기지 않고, 단순히 브랜치가 이동하게 된다.
그렇다면 이런 Fast-forward merge는 언제 일어날까? 바로 두 브랜치가 같은 선상에 있을 때다. 예를 들어 master와 premium 브랜치가 동일한 커밋 라인에 있다면, Fast-forward 머지가 가능하다.
3-way Merge는 Fast-forard Merge와 달리 좀 더 복잡하다. 두 브랜치가 다른 라인에 있을 때 일어나는데, 이때는 실제로 새로운 머지 커밋이 생성된다. 이 과정에서는 세 가지 커밋을 고려한다:

이 세 가지를 기반으로 Git은 자동으로 머지 커밋을 만들어낸다.
3-way 머지의 동작 방식을 이해하기 위해 몇 가지 예시를 들어보자:
X, main는 X 그대로, premium은 Y로 변경된 경우. 여기서는 premium의 변경사항인 Y가 채택된다.ㄱ, main는 ㄴ로 변경, premium은 ㄱ 그대로인 경우. main의 변경사항인 ㄴ이 채택된다.1, master는 2, premium은 3인 경우. 여기서는 두 브랜치 모두 base와 다르게 변경되었기 때문에 충돌(Conflict)이 발생한다.이렇게 3-way 머지는 변경된 부분을 우선시하며, 두 브랜치 모두에서 변경이 있을 경우 충돌을 일으킨다.
이번 글을 통해 Git Merge의 2가지 타입에 대해 심도깊게 알아보았다. Git Merge에 대한 명확한 이해를 가지고 있어야 Conflict를 안전하게 처리 가능하며, 다른 개발자의 코드를 해치지 않을 수 있다.
오늘의 깨달음을 바탕으로 Git Merge에 대해 완벽하게 숙지하여 Git을 안전하고 효율적으로 관리하는 개발자로 나아가자🔥