본문 바로가기
GIT

GIT 6 - Merge & Conflict

by 두잇베스트 2021. 2. 17.

GIT 6 - Merge & Conflict

2021-02-17_14-38-41

 

master의 브런치 버전 상태와 동시에 apple 브런치의 버전을 갖으면서 새로운 버전을 만드려면 어떻게 해야할까? 이럴때 사용하는 것이 merge이다. 그리고 이 버전들의 공통 조상을 base라 한다.

 

 

2021-02-17_15-08-59

 

병합할 브런치들을 미리 만들었다.
master 브런치에서 o2 브런치를 병합하고 싶다면, 현재 HEAD -> o2상태인데 , 우선적으로 master 브런치 상태로 이동해야한다. (git checkout merge ).

 

 

2021-02-17_15-13-25

git merge o2로 병합한다.

 

 

2021-02-17_15-14-16

그림과 같이 병합되어진다.

 

 

파일명이 같은 파일을 병합

2021-02-17_15-22-08

 

2021-02-q-30-22

현재 파일 상태이며, master 브런치에서는 위쪽을 수정할것이고 , 새로운 브런치 o2를 만들고 아랫쪽을 수정해서 병합할것이다.

 

 

2021-02-17_15-33-46

o2의 내용을 master로 병합하고 싶다면?

 

 

2021-02-17_15-39-40

git checkout master로 가서 병합하면 된다. 그리고 그 결과

 

 

2021-02-17_15-40-43

o2의 수정한 텍스트와 master의 수정한 텍스트를 알아서 병합해주는것을 볼수있다.

 

 

Conflict

같은 파일, 같은 부분을 동시에 수정하게 된다면?

2021-02-17_15-49-31

 

2021-02-17_15-50-15

 

파일은 이렇게 되어있으며, o2 브런치도 만들었다.

 

 

 

2021-02-17_15-53-31

 

우선 master 브런치에서 중간 부분에 추가 수정하였다. 그리고 나서

 

 

 

2021-02-17_15-56-19

 

o2브런치로 이동후에 , o2 브런치에서는 중간 부분을 o2로 추가하여 수정하였다. 그리고 master 브런치에서 o2 브런치를 병합하게 된다면 어떻게 될까?

 

 

 

2021-02-17_15-58-20

 

이렇게 Conflict가 일어난다. 그리고 merge가 실패했다고 알려준다. 왜냐하면 같은 부분을 동시에 수정했기 때문에 일어난 사례이다. 그리고 work.txt 파일을 열어보면 어떤 상태일까?

 

 

 

 

2021-02-17_16-00-56

 

=========== 을 중심으로 나눠지게 되는데, 위는 현재 브런치(HEAD)에서의 내용은 master이고 , 밑에는 o2 브런치에서는 o2라는 텍스트라는 것을 말해준다. 해결을 위해

 

 

2021-02-17_16-03-41

다음과 같이 수정하였다.

 

 

2021-02-17_16-04-53

그리고 위와 같이 다시 staging area에 올라가게 되고 커밋할 준비가 된다. 그리고 커밋하면 된다.
그 결과

 

 

 

2021-02-17_16-06-51

잘 merge가 된것을 확인할 수 있으며, 새로운 버전이 생긴것을 볼 수 있다. merge된 버전은 master의 최신 버전과 o2의 최신 버전을 부모로 두고 있다라는 것을 알려준다

 

 

 

3 way merge

 

here base there  2 way merge 3 way merge
A A A A A
H B B 충돌 H
C C T 충돌 T
H D T 충돌 충돌

2 way merge는 공통의 조상 base가 없기 때문에 수정이 일어난 줄에서, 충돌이 다 일어난다.

3 way merge는 공통의 조상 base가 있기 때문에, base를 기반으로 merge가 일어나게 되는데, 둘다 수정이 가한다면 위와 같이 충돌이 일어나고, 한 곳만 수정만 일어나게 된다면, 수정된 부분으로 merge가 일어나는 것이다. 

 

 

 

Reference

생활코딩
https://opentutorials.org/course/3840/23682

#git

'GIT' 카테고리의 다른 글

GIT 8 - rebase  (0) 2021.02.18
GIT 5 - branch  (0) 2021.02.17
GIT 4 - reset & revert  (0) 2021.02.17
GIT2 - 버전간의 차이점  (0) 2021.02.17
GIT 3 - checkout  (0) 2021.02.17

댓글