티스토리 뷰

baby steps/Git

Git 기초지식 02 / merge와 conflict에 대해서 알아보자

무니웜테일패드풋프롱스 2020. 3. 23. 21:40

해당 글은 생활코딩 GIT CLI 강의를 바탕으로 쓰여졌습니다.

 

Merge란 무엇인가?

위의 그림을 통해 알 수 있듯이, "Merge"란, 같은 조상 (base)을 가진 두 branch의 버전을 병합하여 , 새로운 버전을 만드는 것이다. 

자 아래의 이미지를 통해 어떻게 merge를 하는지 보도록 하자. 먼저 첫 두 이미지는 공통조상에서 나온 브랜치가 각각 다른 버전을 만드는 과정이고 마지막 이미지가 바로 merge하는 것이다. 

 

결과적으로 이렇게 새로운 버전이 탄생한다.

 

근데 merge에서 주의할 점은, 바로 conflict '충돌' 이다. 이 conflict는 각각 다른 파일의 내용을 다르게 한 버전들을 병합하거나, 같은 파일 내에서도 다른 부분의 내용을 가진 버전들을 병합할 때는 발생하지 않지만,

"같은 파일의 같은 부분의 내용"을 다르게한 두 버전을 병합할 때 일어난다. 

 

이 conflict는 git이 유저에게 "나 다른데는 다 알아서 처리하겠는데, 여기만 너가 해줘!!" 라고 말하는 것과 같기 때문에,

conflict가 발생하면, conflict가 발생한 파일로 들어가서 내용을 변경해주고 (여기서 >>head <<version2 이런 표시들은 다 지워야한다) 나와서, " git add 파일 이름 " , " git commit"을 해주면 된다.

 여기서 이전에 충돌이 난 파일을 add 해준다는 것은 git에게 "나 충돌 해결했다~~"라고 말해주는 것과 같다.

 

그렇다면 다음은 merge의 원리인 3way merge를 설명한 이미지이다.

즉 두 버전에 대한 병합은 단순히 두 버전만 놓고 보지 않는다! 

만약 두 버전만 놓고 병합을 한다면 (2 way merge) 같은 파일 내 다른 부분을 수정하더라도, "두 버전에서 해당 부분의 내용이 각각 다르다"라고 판단하여 충돌이 일어나게 된다.

하지만 merge는 3 way merge, 즉 버전1, 버전2 그리고 버전1 2 의 base를 함께 놓고 진행된다. 그에 따라서 두 버전에서 내용이 보기에 각각 다르더라도, 버전1에서는 base와 내용이 다르고 버전2에서는 base와 내용이 같다면! 버전1의 내용으로 병합을 한다.

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함