[ git & github ] Git Branch 충돌(Conflict) 처리하기
이 포스팅은 구름 에듀 강좌 나동빈 선생님 강의 "Git으로 시작하는 협업 및 오픈소스 프로젝트" 를 기반으로 작성되었습니다.
edu.goorm.io/learn/lecture/11528/git으로-시작하는-협업-및-오픈소스-프로젝트/info
구름EDU - 모두를 위한 맞춤형 IT교육
구름EDU는 모두를 위한 맞춤형 IT교육 플랫폼입니다. 개인/학교/기업 및 기관 별 최적화된 IT교육 솔루션을 경험해보세요. 기초부터 실무 프로그래밍 교육, 전국 초중고/대학교 온라인 강의, 기업/
edu.goorm.io
- Branch Conflict
일반적으로 두 개 이상의 브랜치에서 동일한 파일을 수정할 때,
그 내용이 다르면 merge를 할 때 충돌이 일어날 수 있습니다.
이러한 경우에는 충돌을 해결한 후 성공적으로 병합이 일어나야 합니다.
과정을 살펴보기 위해 develop 브랜치를 생성해준 후 이 브랜치를 가리키게 해 보겠습니다.
이 상태에서 코드를 수정하겠습니다.
저는 기존에 있던 로컬 저장소 안에 test.py를 수정해보겠습니다.
def add(a,b):
return a+b
def sub(a,b):
return a-b
def mul(a,b):
return a*b
test.py의 전 코드는 위와 같습니다.
def add(a,b):
return a+b
def sub(a,b):
return a-b
def mul(a,b):
return a*b
def div(a,b):
return a//b
수정 후의 코드는 위와 같습니다.
.
코드를 수정 후 git add. 와 git commit을 해주었습니다
git log를 확인해보면 develop 브랜치에 정상적으로 함수가 추가되었고
마스터 브랜치에는 변동이 없는 것을 확인할 수 있습니다.
여기서 브랜치를 마스터로 이동시켜주겠습니다.
그리고, 소스코드를 살짝만 추가해서 test.py 에 주석을 추가하겠습니다.
def add(a,b):
return a+b
def sub(a,b):
return a-b
def mul(a,b):
return a*b
def div(a,b):
return a//b #comment
여기서 마스터 브랜치를 add 후 commit 해보고, log를 살펴보면 아래와 같습니다.
현재 head가 마스터만을 가리키고 있습니다.
git checkout develop 명령어로 현재 가리키는 브랜치를 바꾸고 나서 깃 로그를 살펴보면,
이번에는 head가 develop만을 가르키고 있는 것을 볼 수 있습니다.
이것은 더 이상 두 브랜치가 같지 않다는 것을 의미합니다.
이 상태에서 merge를 하고
master로 옮겨주고 merge 해보겠습니다.
충돌이 일어났다고 에러 메시지가 출력됩니다.
이제 내 test.py를 열어보면 자동으로 깃에서 소스코드가 다른 부분을 명시해주고 있습니다.
위의 주석이 쓰여있는 부분은 master 브랜치의 코드, 아래는 develop 코드 모두를 보여주고 있습니다.
이때 우리는 서로 다른 두 코드 중에서 어떤 것을 사용할지 수동적으로 결정할 수가 있습니다.
자신이 사용할 코드만 남기고 나머지를 모두 지운 후 저장해주면 됩니다.
def add(a,b):
return a+b
def sub(a,b):
return a-b
def mul(a,b):
return a*b
def div(a,b):
return a//b #comment
다시 이 코드 상태로 돌아와서 저장한 거입니다.
저장 후 이전에 실행했던 코드(add, commit, merge develop)를 그대로 실행시켜 주면 이미 병합이 되었다고 출력된다.
로그를 살펴보면, 이미 마스터 브랜치와 develop브랜치가 병합되어 한 화면에 같이 나오게 됩니다.
"develop" 브렌치는 할 일을 다 마쳤으니, 지우겠습니다.
git branch -d "브렌치 이름" 지워준 후 push 명령을 통해 원격 저장소의 변경 내용을 적용시켜주면 됩니다.
성공적으로 병합된 브랜치 내용이 정상적으로 올라간 것을 확인할 수 있습니다.