Learn

충돌 해결하기

Git

Git이 판단을 못 할 때, 여러분이 해야 해요. 단계별로.

두 브랜치가 같은 파일의 같은 줄을 수정하면, Git은 자동으로 병합할 수 없어서 여러분에게 판단을 요청해요. 충돌 해결은 처음엔 무서워도 두 번째엔 훨씬 덜 무서워요.

충돌이 생기는 방법

상상해봐요 : main에서 README.md 1번째 줄이 "안녕하세요"예요. my-feature 브랜치에서 그걸 "반갑습니다"로 바꿨어요. 그 사이 누군가 main에서 "어서오세요"로 바꿨어요. Git은 어느 쪽을 유지해야 할지 몰라요.

merge를 실행하면 :

shell
git switch main
git merge my-feature

Git이 멈추면서 메시지가 나와요 : CONFLICT (content): Merge conflict in README.md.

충돌 마커 읽기

충돌 파일을 열면 이런 게 보여요 :

<<<<<<< HEAD
어서오세요
=======
반갑습니다
>>>>>>> my-feature
  • <<<<<<< HEAD : 충돌 블록의 시작, 현재 브랜치 버전 (여기서는 main).
  • ======= : 두 버전 사이의 구분자.
  • >>>>>>> my-feature : 블록 끝, 들어오는 브랜치의 버전.

충돌 해결하기

파일을 직접 편집해서 원하는 것을 남겨요. 세 개의 마커를 모두 삭제하고 최종 버전을 써요 :

안녕하세요, 어서오세요

또는 두 버전 중 하나만 남기거나, 완전히 다른 것을 써도 돼요. 여러분이 결정해요.

해결 마무리하기

충돌 파일을 모두 편집했으면, stage하고 commit해요 :

shell
git add README.md
git commit -m "README.md 충돌 해결"

Git이 자동으로 merge commit 메시지를 생성해요. 수락하거나 수정할 수 있어요.

아직 충돌 중인 파일이 있는지 언제든지 확인하려면 :

shell
git status

충돌 파일은 "both modified" 아래에 나타나요. 남아 있는 한 merge는 완료되지 않아요.

진행 중인 merge 중단하기

접근 방식이 잘못됐다고 느껴서 모두 취소하고 싶다면 :

shell
git merge --abort

Git이 merge 전의 정확한 상태를 복원해요. 아무것도 잃지 않아요.

git-scm.com - git merge

관련

참고 · ide꼭 있어야 할 확장 기능들

다음 단계를 열려면 단계를 체크하세요

코스로 돌아가기