git

#19 깃(Git) - 브랜치 머지(merge)하기 - 3. conflict 해결하기

에이블디 2021. 11. 26. 16:40

안녕하세요! 에이블디 입니다!

 

이번 시간에는 지난 시간에 이어 브랜치를 머지하는 방법에 대해 계속 알아볼게요!

 

지난 시간에는 동일한 파일에 다른 위치를 수정했을 때 머지를 했다면 이번 시간에는 동일한 파일에 동일한 위치를 수정했을 때 머지하는 법을 알아보겠습니다!

 

깃은 줄 단위로 수정 여부를 확인합니다.

그래서 각 브랜치에 같은 파일 이름을 가지고 있으면서 같은 줄을 수정했을 때 브랜치를 머지하면 브랜치 충돌(conflict)이 발생합니다.

이번 시간에서도 master 브랜치와 YAMA 브랜치에서 같은 파일의 같은 위치를 수정하여 머지했을 때 어떻게 브랜치 충돌이 생기는지, 그리고 어떻게 충돌을 해결하는지 알아보도록 하겠습니다!

 

이번에도 실습환경을 만들기 위해 홈 디렉터리에서 merge-test3 라는 깃 리포지토리를 만들고, merge-test3 디렉터리로 이동해 주세요!

그리고 merge-test3 디렉터리에서 abled.txt 파일을 만들고 아래의 이미지처럼 입력해 주세요!

$ cd ~
$ git init merge-test3
$ cd merge-test3
$ vi abled.txt

내용을 입력하고 저장하셨으면 방금 만든 abled.txt 파일을 스테이징하고 'master 1'이라는 메시지와 함께 커밋합니다.

$ git add abled.txt
$ git commit -m "master 1"

master 브랜치에 커밋이 잘 된 것을 확인하고 YAMA 브랜치를 만들어 줍니다.

$ git branch YAMA

아직 YAMA 브랜치로 체크아웃하지 않았기 때문에 현재 우리는 master 브랜치에 있고, master 브랜치의 최근 커밋을 YAMA 브랜치가 가져왔으니 양쪽 브랜치에 abled.txt가 있겠죠?

현재 우리는 master 브랜치에 있으니 master 브랜치에 있는 abled.txt 파일을 아래의 이미지와 같이 수정해 주세요!

$ vi abled.txt

'#AbleD content' 밑에 한 칸 띄고 'master content'를 입력하셨다면 저장하시고 수정한 abled.txt를 'master 2'라는 커밋 메시지와 함께 커밋해 주세요.

$ git commit -am "master 2"

커밋이 된 걸 확인하시고 YAMA 브랜치의 abled.txt 파일도 수정하기 위해 YAMA 브랜치로 체크아웃하신 뒤 abled.txt 파일을 아래의 이미지와 같이 수정해 주세요!

$ git checkout YAMA
$ vi abled.txt

master 브랜치에서 추가 내용을 입력했던 위치와 같은 곳에 'YAMA content'를 입력하고 저장하셨으면 수정한 abled.txt 파일을 'YAMA 1'이라는 커밋 메시지와 함께 커밋합니다.

$ git commit -am "YAMA 1"

YAMA 브랜치에 커밋이 잘된 것을 확인하셨으면 master에서 브랜치 머지를 위해 master 브랜치로 체크아웃해 주세요.

$ git checkout master

master 브랜치로 체크아웃하셨으면 이제 머지해 볼까요?

동일한 파일을 같은 위치에서 수정했는데 어떻게 될지 궁금하시죠? 어서 머지해보도록 할게요!

$ git merge YAMA

지난 시간에 머지했을 때처럼 자동으로 텍스트 편집기가 열리지 않고 abled.txt 파일을 자동 머지하는 동안 충돌(conflict)이 발생했다는 메시지가 보이는데요, 충돌이 생긴 파일은 자동으로 머지할 수 없으므로 사용자가 직접 충돌 부분을 해결한 후 커밋해야 합니다.

그럼 충돌이 생긴 abled.txt 파일은 어떻게 되어있을지 한번 보도록 할까요?

$ vi abled.txt

abled.txt의 내용이 많이 바뀌어 있네요!

master 브랜치의 내용과 YAMA 브랜치의 내용이 한꺼번에 나타났기 때문인데요, '<<<<<<< HEAD'와 가운데 가로줄 '======' 사이의 내용은 현재 브랜치 (master)에서 수정한 내용이고요, 가로줄 '======'과 '>>>>>>> YAMA' 사이의 내용은 머지할 브랜치 (YAMA)에서 수정한 내용입니다.

이렇게 양쪽 브랜치의 내용을 참고하면서 직접 내용을 수정하여 커밋해야 합니다.

그럼 아래 이미지와 같이 수정을 하고 저장한 뒤 'merge YAMA branch'라는 커밋 메시지와 함께 abled.txt를 스테이징 하고 커밋해 주세요!

$ git commit -am "merge YAMA branch"

master 브랜치에 머지된 abled.txt 파일이 잘 커밋되었네요!

 

이제 git log 명령에 --graph 옵션을 넣어 지금까지 만든 브랜치와 커밋의 관계를 확인해 볼까요?

$ git log --oneline --branches --graph

현재 master 브랜치에 YAMA 브랜치의 내용까지 잘 머지되어 있는 것을 확인할 수 있습니다!

 

이번 시간에는 브랜치 간 파일의 충돌이 일어났을 때 머지하는 법에 대해 공부해 봤습니다!

 

다음 시간에 깃에 대하여 함께 더 공부해 보도록 하겠습니다!

 

그럼 여러분 다음 시간에 만나요!