처음부터 차근차근

merge(branch) 충돌 원리와 3 way merge 본문

Git

merge(branch) 충돌 원리와 3 way merge

_soyoung 2021. 11. 4. 23:08
반응형
merge 충돌 원리

 

merge충돌이 생겼을 때 내부적으로 어떻게 되나 gistory를 통해 볼 수 있다.

 

<현재 상황>

master branch에서 first.txt의 내용 1111로 하고 commit 함(commit 메세지 : first).

다음 ksy branch로 checkout해서 1112로 내용 바꿈. 그리고 commit 함(commit 메세지 : second).

master branch에서 first.txt내용 1144로 바꿈. 그리고 commit 함(commit 메세지 : third).

그 다음 master branch에서 ksy branch를 merge함.

이렇게 하면 파일의 같은 부분을 수정하는 것이기 때문에 당연히 충돌이 생긴다.

그래서 현재 충돌된 상황.

 

이때 gistory로 상태를 보면 다음과 같은 정보를 알 수 있다.

 

1. merge 충돌이 일어나면 index 파일에는 각 branch의 내용과 수정되기 전 내용이 들어있다.

index 파일을 보면 1에는 수정하기 전 first.txt 내용이 있고,

2에는 ksy branch가 수정한 내용인 1144가 있고,

3에는 master branch가 수정한 내용인 1112가 있다.

 

git은 이 3개의 정보로 3 way merge를 한다.

 

 

 

2. merge 충돌이 일어났을 때 MERGE_HEAD를 보면 merge가 될 대상인 branch의 가장 최신 commit이 있다.

MERGE_HEAD 안에는 merge가 될 대상인 ksy branch의 가장 최신 commit인 second가 있다.

 

 

 

3. ORIG_HEAD에는 merge하기 전 master의 정보를 담아놓는다.

ORIG_HEAD에는 병합(merge)는 위험한 작업이기 때문에 ORIG_HEAD에 merge하기 전 master의 정보를 담아놓는다.

 

 

 

4. object 파일 아래에는 충돌 일어난 파일(first.txt)의 내용이 담겨져있다.

충돌 일어난 파일인 first.txt의 내용이 담겨져있다.

 

 

 

<충돌을 해결 했을 때>

5. index 파일에는 수정된 내용이 들어간다.

 

 

 

6. COMMIT_EDITMSG에는 merge한 메세지가 들어간다.

 

 

 

7. object 파일에는 수정된 내용이 들어간다.

 

 

 

 

3 way merge

 

3 way merge기존의 파일 상태를 참고해서 두 branch를 merge하는 방식이다.

+ 2 way merge는 기존의 파일 내용은 보지 않고 merge할 두 branch의 내용만을 보고 merge를 하는 방식이다.

 

예시)

* conflict는 충돌이 나서 사용자가 처리해야되는 상황을 말한다.

 

 

 

 

 

 

 

 

출처 : '지옥에서 온 Git - 생활 코딩' 변형 및 요약

반응형

'Git' 카테고리의 다른 글

github에서 원격 저장소 만들고 연결하기, push와 pull  (0) 2021.11.07
로컬에서 원격 저장소 만들기  (0) 2021.11.06
reset의 종류  (0) 2021.10.29
reset 취소와 commit checkout  (0) 2021.10.28
Branch 충돌  (0) 2021.10.19
Comments