Upgrade Blog Core to v7.1.1 (feat. Jekyll)
병합 충돌 바로 잡기오랜 시간 기본 브랜치와 멀어진 구석기 브랜치 병합에 관하여
깃블로그를 운영하면서 오랜 시간 upstream 코어를 업데이트 하지 않았다.
병합하고자 Pull Request 를 열었으나 무수히 많은 파일들이 변경되었고 또한 충돌을 바로 잡아야 하는 많은 파일들이 있었다.
이를 해결하기 위하여 각 잡고 시간을 내어 충돌하는 부분을 하나씩 확인하고 올바르게 병합을 잡아주었다.
근래에 병합을 시도하려고 했으나 많은 충돌로 미루고 미루다 이번 기회에 시도하게 되었다.
기존 기반은 ‘v6.0.0’ 을 기반으로 깃블로그를 운영하였으나 최근에 릴리즈된 ‘v7.1.1’ 을 따라가고자 Pull Request 를 열어 로컬에서 충돌을 확인하였다.
단계별 확인하자면 아래와 같다.
gitGraph:
commit "test"
commit
commit tag:"v6.0.0"
commit
branch downstream
checkout downstream
commit
commit
commit
checkout main
commit type: HIGHLIGHT
commit
commit type: HIGHLIGHT
commit type: HIGHLIGHT
commit
commit tag:"v7.1.1"
commit
위와 같이 upstream 과 downstream 이 따로 놀면서 여러 블로그 글에 관한 포스팅 커밋을 쌓아가서 병합하면 충돌이 나는 상태가 된다.
gitGraph:
commit "test"
commit
commit tag:"v6.0.0"
commit
branch downstream
checkout downstream
commit id: "4cd65a7"
commit id: "6b78c96"
commit id: "cb7a98b"
checkout main
commit type: HIGHLIGHT
commit
commit type: HIGHLIGHT
commit type: HIGHLIGHT
commit
commit tag:"v7.1.1"
merge downstream
commit
branch develop
checkout develop
commit
commit
어떠한 방향으로 병합을 하든 충돌을 피할 수 없어 먼저 위와 같이 downstream 브랜치를 upstream 브랜치에 병합을 해주고 merge 된 최종 commit 울 기반으로 새로 브랜치를 파면 되는데 이때 무수한 충돌을 해결하는 것이 필요하다. 이때 나는 rebase 를 진행해주어 각 커밋마다 충돌을 해결하였다.
gitGraph:
commit "test"
commit
commit tag:"v6.0.0"
commit id: "4cd65a7"
commit id: "6b78c96"
commit id: "cb7a98b"
commit type: HIGHLIGHT
commit
commit type: HIGHLIGHT
commit type: HIGHLIGHT
commit
commit tag:"v7.1.1"
commit
히스토리가 정리되면 위와 같이 된다. 병합 시 발생하는 충돌을 살펴보았는데 이외에도 굉장히 많은 케이스의 merge conflict 가 일어날 수 있다. 이를 대비하기 위해서는 항상 주기적으로 기본 브랜치의 커밋을 따라가도록 sync 를 맞춰줄 필요가 있으며 기본 브랜치에 큰 변경 사항이 생긴다면 (리팩토링 및 기능 추가 등) 그전에 기본 브랜치 기반으로 개발하는 브랜치들을 merge 또는 close 로 마무리하는 습관을 가지는 것을 권장한다.
If you find any errors, please let me know by comment or email. Thank you.