Profile picture

[Git] 브랜치 컨플릭트 발생 예시 , 컨플릭트 해결하기

JaehyoJJAng2022년 03월 06일

깃 컨플릭트는 역시 당해보지 않으면 뇌에 익지 않는 것 같다. 여러 번 당해봐야 할 것 같다. 뭐든지 경험이 중요하단 걸 깨닫게 되는 오늘이었따.

컨플릭트는 언제?

리모트 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

Loading script...