독도갈매기의 개발 블로그

[GIT] Git Merge 개념 -2- 3-Way Merge 본문

기초 개념

[GIT] Git Merge 개념 -2- 3-Way Merge

독도갈매기 2021. 10. 5. 20:35

3-Way Merge

Commit History

https://git-scm.com/book/en/v2/images/basic-branching-4.png

  • master Branch의 포인터는 C2 Commit에 있습니다.
  • 이후 우리는 login 기능에 이슈가 발생했다는 말을 들어 iss53 Branch를 생성합니다.
  • 갑자기 급히 고쳐야 하는 버그가 발생해 hotfix Branch를 생성 해 버그를 고쳐야 합니다.

success HotFix

https://git-scm.com/book/en/v2/images/basic-branching-5.png

  • hotfix에서 무사히 버그를 해결하여 Fast-Forward하여 master의 포인터는 C4 Commit으로 향하게 됩니다.이후 hotfix는 끝났기 때문에 hotfix branch는 삭제합니다.
  • C2가 부모 Commit인 iss53은 계속 로그인 관련 이슈를 해결합니다.

Difference Parent Commit

https://git-scm.com/book/en/v2/images/basic-branching-6.png

  • 로그인 관련 이슈를 해결한 iss53 Branch는 master Branch와 부모 Commit이 달라졌습니다.
  • 이 경우 새로운 Master Commit이 발생하면서 부모 Commit이 여러개인 Commit이 생성되면서 3-Way Merge가 발생합니다.

https://git-scm.com/book/en/v2/images/basic-merging-2.png

  • 3-Way Merge가 실패 하지 않는다면 위와 같이 새로운 Master Commit이 C5 Commit과 C4 Commit을 부모 Commit으로 삼아 알아서 병합해준다.

Untitled

GitHub Repository → Insights → Network → Network graph

3-Way Merge 중 충돌

  • 가끔씩 3-Way Merge가 실패할 경우가 있다. 이 경우는 Merge 하는 두 Branch에서 같은 파일의 한 부분을 동시에 수정하고 Merge 하면 Git은 해당 부분을 Merge 하지 못한다.
  • 저는 이 충돌을 같은 파일을 수정할 경우라고 이해하고 있습니다.

develop에서 수정한 second.txt 파일

Untitled

hotfix에서 수정한 second.txt 파일

Untitled

Merge 요청시 충돌 발생

Untitled

bash Merge 방법

Untitled

  • Bash에서 Merge 이후 Head 수정사항과 hotfix 수정사항을 개발자가 직접 수정하여 push합니다.

수정 전 - 여기서 HEAD는 master Branch, 밑에 abc2878f...은 난잡한 코드로 되어있지만 hotfix Branch의 내용입니다.

Untitled

수정 후

Untitled

  • 이후 add → commit → push 하면 해결됩니다.

Untitled)))Untitled

이미지 출처

Git - 브랜치와 Merge 의 기초 Merge 시에 발생한 충돌을 다루는 더 어렵고 요상한 내용은 뒤에 고급 Merge 에서 다루기로 한다.
fast-forward 개념 보러 가기

Comments