git 충돌 해결

정민교·2023년 6월 1일
0

git

목록 보기
7/22
post-thumbnail

✔️conflict

깃에서 병합시 충돌이 발생할 수 있습니다.

A라는 브랜치가 있고 B라는 브랜치가 있다고 가정합시다.

A 브랜치에 B 브랜치의 모든 커밋을 병합하려고 합니다.

하지만 병합하려고 git merge B 를 실행했는데 A 브랜치에서 작업한 내용과 B 브랜치에서 작업한 내용에서 충돌이 발생했습니다.

충돌이 발생하는 이유는 같은 파일, 같은 라인에 두 브랜치에서 작업한 내용이 서로 다르기 때문에 발생합니다.

이는 이전에 말했던 브랜치를 전환하는 과정에서도 마찬가지로 발생한다고 언급한 적이 있습니다.

(브랜치를 전환하는 과정에서는 현재 브랜치에서 작업한 변경사항을 commit하지 않은 상태로 다른 브랜치로 이전하려고 하는 경우, 이동 목표 브랜치와 작업 내용에 충돌이 발생하는 경우입니다.)

충돌을 해결하는 과정은 간단합니다.

  1. 일단 merge를 취소합니다.
git merge --abort

충돌이 발생했으니까 그냥 merge를 취소합니다. 이러면 충돌이 발생하지 않겠죠....

말도 안되는 소리는 그만하고 두 번째 방법입니다.

  1. 충돌 부분을 확인하여 수정 후 그 결과를 커밋합니다.

보통 충돌이 발생하면 충돌이 발생하는 파일을 깃이 알려줍니다.

$ git merge new_branch_to_merge_later
Auto-merging merge.txt
CONFLICT (content): Merge conflict in merge.txt
Automatic merge failed; fix conflicts and then commit the result.

위는 예시입니다.

해당 파일을 열어서 충돌이 난 부분을 확인합니다.

$ cat merge.txt
<<<<<<< HEAD
this is some content to mess with
content to append
=======
totally different content to merge later
>>>>>>> new_branch_to_merge_later

위는 cat으로 해당 파일 내용을 확인했지만 editor로 파일을 열어서 충돌 부분을 확인하고 수정하는 것이 대부분입니다.

위를 보면

<<<<< HEAD
=====
'>>>>> merge branch

이런식으로 충돌 마커가 생성되어 있습니다.

HEAD는 현재 브랜치입니다.

앞선 포스팅에서 말한 것처럼 병합을 위해서는 기준이 되는 브랜치로 먼저 이동해야 합니다.

따라서 HEAD는 현재 브랜치의 내용을 보여주고, ==== 밑의 내용은 합치려는 브랜치의 내용을 보여줍니다.

따라서 HEAD가 가리키는 현재 브랜치의 내용을 남길지, 병합하려는 브랜치의 내용을 남길지는 여러분의 자유입니다.

두 내용 다 갖고 싶으면 두 내용을 다 넣을 수 있습니다.

결정했다면 충돌 마커를 지우고 이 내용을 커밋합니다.

이렇게 충돌을 해결할 수 있습니다.


🙏🙏🙏
git 시리즈에 작성한 포스팅은

https://www.udemy.com/course/best-git-github/
유데미 강좌
https://www.yes24.com/Product/Goods/110795446
모두의 깃 & 깃허브

위 내용을 참고하였으며, 제 실습화면을 캡쳐한 사진 외의

대부분의 사진들은 인터넷 강좌에서 제공하는 자료를 캡쳐하였습니다.

깃 시리즈 포스팅의 내용 및 사진을 절대로 상업적 목적으로 무단 복사하지 말아주세요.

profile
백엔드 개발자

0개의 댓글