깃 컨플릭트는 역시 당해보지 않으면 뇌에 익지 않는 것 같다. 여러 번 당해봐야 할 것 같다. 뭐든지 경험이 중요하단 걸 깨닫게 되는 오늘이었따.
컨플릭트는 언제?
리모트 feat/branch 를 리모트 main 에 합치고자 할 때, 리모트의 main 브랜치 내용과 feat/branch 의 내용이 서로 달라서 머지가 안되는 경우가 있는데 , 이 경우에 conflict 가 발생한다
컨플릭트 해결 방법
(1) 로컬 main 브랜치에서 원격지의 main 브랜치를 pull
$ git pull origin main
(2) 로컬 main 브랜치는 그대로 놔두고 , 로컬의 feat/branch 로 checkout
$ git checkout -b feat/branch
(3) 로컬 feat/branch 에서 로컬 main 브랜치를 merge
머지할 때 현재 작업 중인 것은 날라가지 않음
merge 로그 예시
From https://github.com/JaehyoJJAng/git-conflict-example
* branch main -> FETCH_HEAD
Auto-merging streamlit.ini
CONFLICT (content): Merge conflict in streamlit.ini
Automatic merge failed; fix conflicts and then commit the result.
$ git merge main
(4) 컨플릭트 해결
'git status' 로 both modified 또는 both added 된 파일 찾기
$ git status | grep "both"
both modified: streamlit.ini
both modified: streamlit.ini 파일 살펴보기
$ vim streamlit.ini
<<<<<<< HEAD
host=xxxi
api_key=xxxo
test_key=xxxe
=======
host=xxxo
api_key=xxx
test_key=xxxo
order_key=xxx
>>>>>>> cb3cf8eb73dff364e6575928ee13bb4e54918182
위 처럼 '=======' 를 기준으로
- 윗 부분이 '기존 코드'
- 아랫 부분이 '변경된 코드'
그래서 위 내용 중 적용하고자 하는 부분의 코드만 남긴 채 전부 삭제해주면 된다.
충돌 코드를 삭제 해주고 나서 다시 merge 하면 정상적으로 병합이 된다.
$ git merge main