여러 사람과 개발 작업을 하다 보면 충돌이 자주 발생한다. 대부분의 충돌 원인은 같은 위치의 코드를 동시에 수정했을 때 두 수정 중 어떤 것이 맞는지 깃에서 자동으로 알 수 없기 때문에 발생한다. 보통 3-way 병합이 실패한 경우이다.
충돌 상황을 만들기 위하여 main 브랜치에서 footer 브랜치를 생성하고 임의의 파일을 수정한 다음 커밋한다.
다시 main 브랜치로 체크아웃하고 충돌이 발생하도록 같은 파일의 같은 위치를 수정한 후 커밋한다.
서로 다르게 분기된 브랜치이기 때문에 3-way 병합을 시도한다면 자동으로 병합되지 못하고 충돌이 발생하게 된다. 이어서 git status로 작업 상태를 확인해보면 커밋되지 않은 변경 사항이 추가가 되어있음을 알 수 있다.
수동으로 충돌 해결
깃은 충돌이 발생하면 충돌된 코드 내용을 기호와 함께 표시한다. 충돌은 두 부분으로 표시되며 하나는 기준이 되는 브랜치 내용, 다른 하나는 병합하고자 하는 브랜치 내용이다. 직접 소스 코드를 보고 충돌된 부분을 확인한 후 코드를 수정해야 한다.
충돌된 파일을 열면 다음과 같이 충돌된 부분이 표시되어 있다. 충돌된 내용을 수정할 때는 깃에서 표시한 충돌 기호도 같이 삭제해야 한다.
직접 충돌을 해결하고 저장했을 때 병합 커밋이 자동으로 생성되지 않으므로 직접 커밋을 만들어야 한다. modified 상태가 된 파일을 스테이지 영역에 등록하고 커밋하면 된다.
병합 취소
방금 실행한 병합을 취소할 때는 abort 옵션을 사용한다.
$ git merge --abort
'Git' 카테고리의 다른 글
커밋 복귀 (0) | 2025.03.25 |
---|---|
리베이스(rebase) (0) | 2025.03.24 |
병합 (0) | 2025.03.17 |
워킹 디렉토리 정리 (0) | 2025.03.16 |
수정 사항 복원 중 충돌 해결 (0) | 2025.03.16 |