본문 바로가기
Program Development Tips/Git

[Git] Merge의 모든 것: Fast-Forward와 3-Way Merge 차이점 완벽 이해

by Maccrey Coding 2024. 8. 27.
반응형

 

Git에서 브랜치를 병합할 때 새로운 커밋이 생긴다는 것은 잘 알려진 사실입니다.

오늘은 이 병합(Merge) 과정에서 발생하는 두 가지 주요 방식, Fast-Forward Merge3-Way Merge에 대해 깊이 있는 이야기를 해보겠습니다.

1. Merge 커밋이란?

 

먼저 Merge 커밋이 무엇인지 짚고 넘어가겠습니다.

Merge 커밋은 두 브랜치의 작업을 병합할 때 생성되는 특별한 커밋으로, 병합 결과를 기록합니다.

보통은 한 브랜치에서 다른 브랜치를 합칠 때 만들어지며, 두 브랜치의 변경사항을 모두 포함하게 됩니다.

2. Fast-Forward Merge: 새로운 커밋 없이 병합하기

 

Fast-Forward Merge는 새로운 커밋을 생성하지 않는 병합 방식입니다.

이 방식은 두 브랜치가 커밋 히스토리 상 같은 선상에 있을 때 적용됩니다.

예를 들어, master 브랜치가 premium 브랜치와 병합될 때, master 브랜치가 premium 브랜치의 끝으로 단순히 이동하면서 병합이 이루어집니다.

git merge premium

이렇게 하면 premium 브랜치의 마지막 커밋이 master 브랜치의 마지막 커밋으로 설정됩니다.

이 과정에서 새로운 커밋이 생성되지 않기 때문에 커밋 히스토리가 깔끔하게 유지됩니다.

3. 3-Way Merge: 새로운 커밋이 필요한 경우

Fast-Forward Merge가 불가능한 경우에는 3-Way Merge가 발생합니다.

이 방식은 브랜치 간에 커밋 히스토리가 분리된 경우, 즉 서로 다른 선상에 있을 때 사용됩니다.

3-Way Merge는 다음 세 가지 요소를 고려하여 새로운 Merge 커밋을 생성합니다.

  1. Base 커밋: 두 브랜치의 공통 조상 커밋.
  2. 현재 커밋: 병합할 브랜치의 최신 커밋.
  3. 병합할 커밋: 다른 브랜치의 최신 커밋.

Git은 이 세 커밋을 비교하여 병합 결과를 결정하며, 그 결과를 새로운 커밋으로 기록합니다.

예를 들어, master 브랜치와 premium 브랜치가 서로 다른 작업을 포함하고 있을 때, 병합 명령어는 다음과 같이 실행됩니다.

git merge premium

이 명령어를 실행하면 Git은 자동으로 두 브랜치의 변경 사항을 통합하고, 이를 새로운 Merge 커밋(A+B)으로 저장합니다.

4. Merge 결과 분석: 다양한 상황별 사례

아래 표는 다양한 상황에서 Merge가 어떻게 작동하는지 보여줍니다.

 

상황                              Base                         Master                               Premium                       Merge 결과

Case 1 A A B B
Case 2 1 2 1 2
Case 3 "hello" (공백) "hello" (공백)
Case 4 "bye" "fighting" "please" Conflict 발생!
  • Case 1: Base와 동일한 내용을 가진 master와 변경된 premium이 있을 때, premium의 변경 사항이 적용됩니다.
  • Case 2: master에서의 변경 사항이 premium보다 최신이기 때문에 master의 내용이 우선됩니다.
  • Case 3: master에서 내용을 삭제했기 때문에, 병합 결과도 삭제된 상태가 됩니다.
  • Case 4: 두 브랜치에서 모두 내용이 변경된 경우, Conflict가 발생하여 사용자가 직접 해결해야 합니다.

5. Fast-Forward와 3-Way Merge 요약

  • Fast-Forward Merge: 브랜치가 같은 커밋 히스토리 선상에 있을 때 발생하며, 새로운 커밋이 생성되지 않습니다.
  • 3-Way Merge: 브랜치가 서로 다른 커밋 히스토리를 가지고 있을 때 발생하며, 새로운 Merge 커밋이 생성됩니다.

이제 Git Merge의 두 가지 방식, Fast-Forward와 3-Way Merge에 대해 잘 이해하셨을 겁니다.

각 방식의 특징과 적용 상황을 기억해두면 Git을 더 효과적으로 사용할 수 있습니다!

공감과 댓글은 저에게 큰 힘이 됩니다.

Starting Google Play App Distribution! "Tester Share" for Recruiting 20 Testers for a Closed Test.

 

Tester Share [테스터쉐어] - Google Play 앱

Tester Share로 Google Play 앱 등록을 단순화하세요.

play.google.com

 

 

반응형