처음부터 차근차근
merge(branch) 충돌 원리와 3 way merge 본문
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 |