Youjin Lee.

[Git] Fast-Forward Merge, 3-Way Merge 알아보기

[Git] Fast-Forward Merge, 3-Way Merge 알아보기

Git의 Fast-Forward merge와 3-Way merge 방식에 대해 알아보자

[Git] Fast-Forward Merge, 3-Way Merge 알아보기

이번에 교내 동아리에서 Git 관련 교육 자료를 작성하면서 Fast-Forward merge, 3-Way merge에 대한 내용을 다뤘다. Git을 사용하는 사람들이 알아두면 좋을 내용인 것 같아서 벨로그에도 공유해보기로 했다. 도움이 되기를!

🍛 김치볶음밥으로 이해하는 Branch의 개념

Fast-Forward merge, 3-Way merge는 Merge의 방식으로, 너무 당연하게도 두 방식을 알기 위해서는 머지가 무엇인지부터 알고 있어야 한다.

그런데 사실 머지를 알기 위해서는 브랜치(Branch)의 개념을 먼저 알고 있는 게 중요하다. 이 브랜치를 한 문장으로 설명하자면 내가 작업하는 독립적인 영역 정도로 설명할 수 있는데, 이렇게 개념적인 말로 설명하면 이해하기 힘드니까 ... 김치볶음밥으로 예시를 한 번 들어보겠다.

모두가 다같이 협력해서 김치볶음밥을 만드는 상황에서 한명은 계란프라이를 만들고, 한명은 파를 썰고, 한명은 밥을 지어야 한다고 가정해봅시다.

이 세명은 서로에게 전혀 영향을 주지 않는 작업을 동시에 진행하게 됩니다. 그렇지만 각자의 작업이 끝났을 때는 파도 썰어져 있고, 계란프라이도 만들어져 있고, 밥도 지어져 있겠죠?

이렇게 각자의 작업이 끝나면 파, 밥, 계란프라이를 모두 합쳐 볶음밥을 만드는 작업을 진행하게 될겁니다.

이렇게 한 시점에서 서로에게 영향을 주지 않는 작업을 진행하기 위해 브랜치를 생성한다. 즉 브랜치는 개발자들이 동시에 작업하지만 서로에게 영향을 끼치지 않도록 처리해주는 것!

🔗 브랜치 간 내용을 병합하는 Merge

현재 브랜치에서 다른 브랜치의 변경 사항을 가져오고 싶을 때 사용하는 명령어가 바로 git merge다. 그런데 사실 협업 시에는 해당 명령어를 잘 사용하진 않고 모두가 잘 아는 pull request를 작성하곤 한다.

🧠 HEAD의 위치를 바꾸는 Fast-forward merge

모든 브랜치에는 HEAD라는 값이 존재한다. HEAD는 현재 브랜치의 최신 커밋을 참조하는 값으로, 현재 내가 위치하고 있는 브랜치의 최신 커밋을 포인터로 가리키고 있다고 생각하면 된다!

Git에서는 기준이 되는 브랜치에 신규 커밋이 존재하지 않고 다른 브랜치에만 새로운 커밋이 존재할 때 자동으로 fast-forward merge를 실행한다!

3️⃣ 세 커밋을 비교해 병합하는 3-way merge

두 브랜치 모두 다른 변경사항이 생기는 경우에는 3-way merge를 이용한다. 두 브랜치에 모두 변경사항이 있어 여러 변경사항들을 비교해야 할 때 3-way merge를 활용한다.

이렇게 세 개의 커밋이 merge에 사용되기 때문에 3-way merge라고 부르는 것이다.

사실 나도 두 방식에 대해 정확하게 설명해보라고 하면 못했을 것 같은데 이번에 자료를 제작하면서 스스로도 개념을 다시 되새길 수 있었던 시간이었다 🥹

© 2025 Youjin Lee. All rights reserved.