튜토리얼1: 브랜치를 사용해보자
6. 병합할 때 발생하는 충돌 해결하기
이번에는 'issue2' 브랜치에서 변경한 부분과 'issue3' 브랜치에서 변경한 부분을 모두 'master' 브랜치에 통합해 보도록 하겠습니다.
먼저 'master' 브랜치를 체크아웃한 다음 'issue2' 브랜치를 병합합니다.
$ git checkout master Switched to branch 'master' $ git merge issue2 Updating b2b23c4..8f7aa27 Fast-forward myfile.txt | 2 ++ 1 files changed, 2 insertions(+), 0 deletions(-)
이렇게 하면 앞서 설명되었던 'fast-forward(빨리감기) 병합'이 실행됩니다. 아래 그림을 보면, 'master' 브랜치에 'issue2' 브랜치가 병합된 것을 확인할 수 있습니다.
이번에는 'issue3' 브랜치를 병합합니다.
$ git merge issue3 Auto-merging myfile.txt CONFLICT (content): Merge conflict in myfile.txt Automatic merge failed; fix conflicts and then commit the result.
'CONFLICT(충돌)'이라 나오는 것을 보니 자동 병합에 실패한 것 같습니다. 앞서 각각의 브랜치에서 변경한 내용이 myfile.txt 의 같은 행에 포함되어 있기 때문입니다. 실제로 myfile.txt 의 내용을 확인해 보면 다음과 같이 변경되어 있습니다.
원숭이도 이해할 수 있는 Git 명령어 add: 변경 사항을 만들어서 인덱스에 등록해보기 <<<<<<< HEAD commit: 인덱스의 상태를 기록하기 ======= pull: 원격 저장소의 내용을 가져오기 >>>>>>> issue3
충돌이 있는 부분에 Git 이 자동으로 위와 같이 충돌 정보를 포함하여 파일 내용을 변경합니다. 이 내용을 통해 어떤 브랜치에서 어떤 부분이 충돌되었는지 확인할 수 있습니다. 충돌이 일어난 부분은 이렇게 일일이 확인해서 수정해 주어야 합니다. 그럼 아래와 같이 파일 내용을 변경해 봅시다.
원숭이도 이해할 수 있는 Git 명령어 add: 변경 사항을 만들어서 인덱스에 등록해보기 commit: 인덱스의 상태를 기록하기 pull: 원격 저장소의 내용을 가져오기
충돌 부분을 모두 수정했으므로, 다시 커밋합니다.
$ git add myfile.txt $ git commit -m "issue3 브랜치 병합" # On branch master nothing to commit (working directory clean)
이 시점까지의 이력을 보면 다음과 같습니다. 이번 병합은 충돌 부분을 수정했기 때문에 그 변화를 기록하는 병합 커밋이 새로 생성 되었습니다. 그리고 'master' 브랜치의 시작('HEAD')이 그 위치로 이동해 있는 것을 확인할 수 있습니다. 아래와 같은 방식을 'non fast-forward 병합'이라고 합니다.