[Git] 브랜치와 브랜치를 합치기 : 병합(merge)

2022. 4. 19. 13:01Git

1. 병합은 무엇인가?

병합은 두 버전의 합집합을 구하는 것입니다.

  • 병합 커밋 : 각각의 커밋이 겹치는 부분이 없으므로 새로운 커밋에 합친 결과가 나옴
  • 빨리 감기 : 커밋2가 커밋1을 기반으로 b.txt를 추가한 것이므로 병합 결과는 커밋2와 동일하게 나옴
  • 충돌 : 커밋1이 a.txt를 작성하고 커밋2가 a.txt에서 작성한 부분을 수정하였다고 가정할때 병합시 충돌이 발생함. Git은 어떤 것으로 병합할지 오류를 일으킴

2. 두 브랜치를 합치는 과정

2.1 main 브랜치에 feature/detail-page 브랜치를 합치기(Before)

feature/detail-page 브랜치의 커밋은 단순히 main 브랜치를 기반으로 수정한 최신본이기 때문에 두 상태(main, feature/detail-page)를 합치면 따로 바귀는 상태 없이 feature/detail-page 커밋이 될 것입니다. 이는 위의 경우에는 빨리 감기(Fast-forword)에 해당됩니다.

2.2 main 브랜치에 feature/detail-page 브랜치를 합치기(After)

2.3 [feature/detail-page] 브랜치의 모든 내용이 [main] 브랜치에 병합되었으므로 [feature/detail-page] 브랜치는 삭제됩니다.

2.4 [feature/cart] 브랜치를 [main] 브랜치에 병합 시도

현재 [main] 브랜치는 [feature/cart] 브랜치가 가리키는 중심 커밋(update README.md)에서 달라졌기 때문에 빨리 감기 병합이 아닌 병합 커밋 사례가 됩니다. 이는 [main] 브랜치의 커밋과 [feature/cart] 브랜치의 커밋을 합친 병합 커밋을 생성하게 됩니다.

 

방법1 : [main] 브랜치의 커밋과 [feature/cart] 브랜치의 커밋을 합한 병합 커밋을 [main] 브랜치에 올림

방법2 : [main] 브랜치의 커밋과 [feature/cart] 브랜치의 커밋을 합한 병합 커밋을 [feature/cart] 브랜치에 올림

 

브랜치를 기준으로 병합하는 경우 2가지

  1. [main] 브랜치를 기준으로 병합 : 합친 결과물을 [main] 브랜치에 반영
  2. [feature/cart] 브랜치를 기준으로 병합 : 합친 결과물을 [feature/cart] 브랜치(서브 브랜치)에 반영

 

3. 브랜치 합치기 실습 : 빨리 감기 병합(Fast-forward Merge)

[main] 브랜치를 기준으로 [feature/detail-page] 브랜치를 [main] 브랜치에 합치는 것을 실습합니다.

 

3.1 [main] 브랜치로 체크아웃

3.2 [main] [feature/detail-page] 브랜치의 커밋을 오른쪽 버튼을 클릭하고 병합 수행

3.3 [main] 원격저장소의 main 브랜치에 푸시

 

References

source code : https://github.com/yonghwankim-dev/git_study
팀 개발을 위한 Git Github 시작하기, 정호영 진유림 저