본문 바로가기
프로그래밍 ( Programming )/깃허브 (GitHub)

7. Git Branch 충돌 처리하기

by Jayce_choi 2021. 11. 18.
반응형

충돌 해결하기

6번 게시글에서는 간단한 merge를 수행해보았는데 이번 글에서는 merge 상황에서 충돌이 발생했을 경우 어떻게 처리를 하는지에 대해서 적어보도록 하겠습니다. 

 

우선 기존에 존재하는 master branch 이외에 다른 branch를 생성해줍니다. 

git branch develop1를 통해서 develop1이라는 새로운 branch를 생성하였으며 checkout을 통해서 우리의 control 영역을 새로운 branch로 이동을 하였습니다 (별표가 develop1을 가리키고 있습니다) 

 

 

이제 충돌 상황을 우선 만들 예정입니다. 

1. 먼저 로컬에 있는 파이썬 코드를 수정해봅시다. 

저는 add_module이라는 파이썬 파일에서 add_3times라는 새로운 함수를 추가로 넣어주었습니다. 

그리고 git add 명령어와 git commit을 실행해줍니다. 

 

그리고 git log 명령어를 통해서 log를 확인하면 develop1이라는 branch에만 현재 새로운 commit이 생긴 것을 확인하실 수가 있습니다. (Master에는 아직 없습니다)

 

 

2. 다시 master로 돌아와서 동일한 파이썬 파일의 내용을 일부 수정해보고 반응을 봅시다. 

git checkout master를 통해서 Control 영역을 master branch로 옮겨왔습니다.

 

그리고 python파일을 보면 def add_3times라는 함수가 없는 것을 관찰할 수가 있습니다.

때문에 develop1에 있었던 def add_3times라는 함수를 동일하게 코드를 작성해주되 주석만 추가해봅니다. 

 

이제 하단과 같이 master로 이동 및 git add . 명령 및 commit을 통해 수정한 내용에 대해서 기록을 해줍니다. 

 

다음은 현재 상황에 대해서 정리한 표입니다. 다른 branch에서 git log를 했을 때 보이는 결과로 서로의 branch에 포함된 내용은 보이지 않고 있습니다. (파일과 commit 자체가 다른 상황입니다) 

master branch에서 git log 실행시  develop1 branch에서 git log 실행시 
commit 내용: Add add_module [add_3times] & comment commit 내용: Add add_module [add_3times] 

 

이제 병합을 해보고 반응을 봅시다. (merge는 보편적으로 master에서 수행하기에 master로 이동해줍니다) 

merge를 실행하면 자동 merge가 실패했다고 나오게 됩니다. 왜냐하면 코드가 다르기 때문에 당연한 결과로써 에러 메시지가 나타나게 되었습니다. 

*자동 merge라는 의미는 git이 실제 자동으로 코드를 합쳐주는 것을 의미합니다. 실제 작성했던 파이썬 파일에 들어가서 내용을 보면 develop1에 있던 내용과 master에 있던 내용이 merge 되어서 둘 다 공존하는 것을 보실 수가 있습니다.

 

 

3. 이제 conflict 문제를 해결해봅시다. 

충돌이 일어난 부분에는 2가지가 표현되어 있습니다. master에서 사용된 코드와 develop1에서 사용된 코드가 2개 모두 같이 존재하는데 여기서 선택을 해야합니다. 만약 master에 해당하는 내용을 선택한다면 밑에 내용을 지워주시면 되고 만약 develop1의 내용을 선택한다면 ==== 기준으로 위의 내용을 지워주시면 되겠습니다.

 

저는 master의 내용을 선택하기 위해서 다음과 같이 소스코드를 수정하였습니다. 

 

수정한 후에 다시 merge를 해봅시다. git add .명령어와 git commit을 수행하고 git merge까지 하였습니다. git merge 명령어를 입력했을 때 문제없이 수행이 된듯합니다. 

 

git log 명령어를 통해서 확인을 해보면 다음과 같이 master branch에 develop1의 commit 내용 또한 반영이 되어서 같이 존재하는것을 확인하였습니다. 

 

이제 사용을 다한 develop1 branch는 git branch -d develop1 명령어와 함께 제거를 해주시고 git push까지 수행함으로써 원격 저장소에 반영을 시켜서 마무리를 하겠습니다. 

원격 저장소에서의 모습

 


이번 글에서는 master와 다른 branch에서 코드 수정하는 부분이 동일한 상황에서 각 branch에서 작성한 내용이 달라서 merge를 수행했을때 conflict 문제가 발생했을 때 이를 해결하는 글을 적어보았습니다. 

 

반응형

댓글