관리 메뉴

FU11M00N

[ git & github ] Git Branch 충돌(Conflict) 처리하기 본문

Git

[ git & github ] Git Branch 충돌(Conflict) 처리하기

호IT 2021. 2. 18. 04:48

 

 

이 포스팅은 구름 에듀 강좌 나동빈 선생님 강의 "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 명령을 통해 원격 저장소의 변경 내용을 적용시켜주면 됩니다.

 

 

 

성공적으로 병합된 브랜치 내용이 정상적으로 올라간 것을 확인할 수 있습니다.

 

Comments