티스토리 뷰
해당 글은 생활코딩 GIT CLI 강의를 바탕으로 쓰여졌습니다.
위의 그림을 통해 알 수 있듯이, "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의 내용으로 병합을 한다.
'baby steps > Git' 카테고리의 다른 글
Git 기초지식 03 / git remote, git push, git pull & git clone (0) | 2020.03.28 |
---|---|
Git 기초지식 01 / branch의 기초 (0) | 2020.03.14 |
Git 기초지식 00/ 기초 버전관리 명령어 (0) | 2020.03.08 |