독도갈매기의 개발 블로그
[GIT] Git Merge 개념 -2- 3-Way Merge 본문
3-Way Merge
Commit History
- master Branch의 포인터는 C2 Commit에 있습니다.
- 이후 우리는 login 기능에 이슈가 발생했다는 말을 들어 iss53 Branch를 생성합니다.
- 갑자기 급히 고쳐야 하는 버그가 발생해 hotfix Branch를 생성 해 버그를 고쳐야 합니다.
success HotFix
- hotfix에서 무사히 버그를 해결하여 Fast-Forward하여 master의 포인터는 C4 Commit으로 향하게 됩니다.이후 hotfix는 끝났기 때문에 hotfix branch는 삭제합니다.
- C2가 부모 Commit인 iss53은 계속 로그인 관련 이슈를 해결합니다.
Difference Parent Commit
- 로그인 관련 이슈를 해결한 iss53 Branch는 master Branch와 부모 Commit이 달라졌습니다.
- 이 경우 새로운 Master Commit이 발생하면서 부모 Commit이 여러개인 Commit이 생성되면서 3-Way Merge가 발생합니다.
- 3-Way Merge가 실패 하지 않는다면 위와 같이 새로운 Master Commit이 C5 Commit과 C4 Commit을 부모 Commit으로 삼아 알아서 병합해준다.
GitHub Repository → Insights → Network → Network graph
3-Way Merge 중 충돌
- 가끔씩 3-Way Merge가 실패할 경우가 있다. 이 경우는 Merge 하는 두 Branch에서 같은 파일의 한 부분을 동시에 수정하고 Merge 하면 Git은 해당 부분을 Merge 하지 못한다.
- 저는 이 충돌을 같은 파일을 수정할 경우라고 이해하고 있습니다.
develop에서 수정한 second.txt 파일
hotfix에서 수정한 second.txt 파일
Merge 요청시 충돌 발생
bash Merge 방법
- Bash에서 Merge 이후 Head 수정사항과 hotfix 수정사항을 개발자가 직접 수정하여 push합니다.
수정 전 - 여기서 HEAD는 master Branch, 밑에 abc2878f...은 난잡한 코드로 되어있지만 hotfix Branch의 내용입니다.
수정 후
- 이후 add → commit → push 하면 해결됩니다.
)))
Git - 브랜치와 Merge 의 기초 Merge 시에 발생한 충돌을 다루는 더 어렵고 요상한 내용은 뒤에 고급 Merge 에서 다루기로 한다.
fast-forward 개념 보러 가기
'기초 개념' 카테고리의 다른 글
[GIT] Git Merge 개념 -1- Fast-Forward (0) | 2021.10.02 |
---|---|
세미콜론은 왜 필요한걸까? 인터프리터와 컴파일의 차이점 (0) | 2020.10.07 |
RAM은 왜 RAM일까? (0) | 2020.08.15 |
변수란 무엇일까? (0) | 2020.08.12 |
Comments