git

git branch (step2. 병합할 때 발생하는 충돌 해결)

Developer Mobssie 2021. 2. 26. 23:44

출처: https://backlog.com/git-tutorial/kr/stepup/stepup2_7.html

 

1. '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' 브랜치가 병합된 것.

 

 

2. '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 의 같은 행에 포함되어 있기 때문.

 

<<<<<<< HEAD

commit: 인덱스의 상태를 기록하기

=======

pull: 원격 저장소의 내용을 가져오기

>>>>>>> issue3

 

충돌이 있는 부분에 Git 이 자동으로 위와 같이 충돌 정보를 포함하여 파일 내용을 변경해야함.

어떤 브랜치에서 어떤 부분이 충돌되었는지 확인할 수 있다. 충돌이 일어난 부분은 이렇게 일일이 확인해서 수정해 주어야한다. 

충돌 부분을 모두 수정했으므로, 다시 커밋

$ git add myfile.txt
$ git commit -m "issue3 브랜치 병합"
# On branch master
nothing to commit (working directory clean)

이번 병합은 충돌 부분을 수정했기 때문에 그 변화를 기록하는 병합 커밋이 새로 생성 되었다.

그리고 'master' 브랜치의 시작('HEAD')이 그 위치로 이동해 있는 것을 확인할 수 있음.

아래와 같은 방식을 'non fast-forward 병합'이라고 함.