Git 정리 - 버전 관리 - Branch - 병합

'Git' 시리즈Git 정리 - 버전 관리 - Branch - 병합

mildsalmon

흔치않고, 진귀하다.

Sign in to view email

브랜치 병합 (merge)

브랜치 작업이 마무리되면 기존 브랜치와 합해야 한다.

git merge (브랜치 이름)

빨간 박스는 Vim 편집기 화면이다.

빨리 감기 병합

master 브랜치에서 브랜치를 분기한 후에 master 브랜치에 아무 변화가 없다면,
분기한 브랜치에서 만든 최신 커밋을 master 브랜치가 가리키게만 하면 되기 때문에 브랜치 병합이 간단하다.

Fast-forward라는 메시지가 나와서 빨리 감기 병합(fast-forward merge)라고 부른다.
master 브랜치의 포인터를 움직인 것이기 때문에 따로 커밋 메시지 창은 열리지 않는다.

브랜치 병합할 때 편집기 창이 열리지 않게 하려면

편집기 창을 열지 않고 깃에서 지정하는 커밋 메시지를 그대로 사용한다.

git merge show --no-edit

편집기 창을 다시 열고 싶다면.

git merge show --edit

같은 문서의 다른 위치 수정했을 때 병합하기

master 브랜치에서는 1을 추가하고,
show5 브랜치에서는 2를 추가했다.

Auto-merging test7.txt로 시작하는 병합 완료 메시지가 나온다.

test7.txt 파일에는 각 브랜치에서 수정한 내용이 잘 합쳐졌다.

같은 문서의 같은 위치를 수정했을 때 병합하기

깃에서는 줄 단위로 변경 여부를 확인한다.
각 브랜치에 같은 파일 이름을 가지고 있으면서 같은 줄을 수정했을 때 브랜치를 병합하면 브랜치 충돌(conflict)이 발생한다.

master 브랜치에서는 master를 추가했고,
show6 브랜치에서는 show6를 추가했다.

merge를 입력하면 test8.txt를 자동 병합하는 동안 충돌이 발생했다고 뜬다.
test8.txt를 가면,
절취선을 기준으로 윗 부분.
<<<<< HEAD
master
이 부분이 현재 브랜치에서 수정한 내용.
아랫 부분.
show6
>>>>>> show6
이 부분이 show6 브랜치에서 수정한 내용이다.
양쪽 브랜치의 내용을 참고하면서 직접 내용을 수정해야 한다.

수정이 끝났으면 <<< HEAD, >>> show6, ===은 삭제하자.

병합 및 충돌 해결 프로그램

프로젝트의 규모가 커지면 브랜치가 많아진다.
브랜치에서 병합해야 할 파일도 많아진다.
그 만큼 충돌도 많이 생길 수 밖에 없다.
그래서 깃의 브랜치 병합을 자동으로 처리해 주고 충돌을 해결해 주는 프로그램이 많다.

2 way merge와 3 way merge가 있는데,
3 way merge가 훨씬 효율적이므로 3 way merge를 지원하는 프로그램을 선택하자.

프로그램 이름 설명
P4Merge 무료, 직관적이라 사용이 편리, 병합 기능이 뛰어남.
단축기가 지원 안되는 단점이 있음.
Meld 무료, 오픈소스, 파일을 비교하는 것 뿐만 아니라 직접 편집할 수 있음
Kdiff3 무료, 사용이 편리, 병합 기능이 뛰어남
한글이 깨져 보일 수 있음
Araxis Merge 유료, 용량이 큰 파일에서도 잘 동작

병합이 끝난 브랜치 삭제하기

병합이 끝나고 더 이상 사용하지 않는 브랜치는 깃에서 삭제할 수 있다.
단, 이렇게 브랜치를 삭제하더라도 브랜치가 완전히 지워지는 것이 아니다.
같은 이름의 브랜치를 만들면 예전 내용을 다시 볼 수 있다.

브랜치 삭제는 저장소의 기본 브랜치인 master 브랜치에서 해야한다.

Deleted branch show라는 메시지가 나오면 브랜치가 삭제된 것이다.
브랜치를 삭제한다는 것은 저장소에서 완전히 없애는 것이 아니라 깃의 흐름 속에서 감추는 것이다.

브랜치에서 checkout

checkout에 관한 내용은 아래 링크에 자세히 정리해 두었다.

Git 정리 - 버전 관리 - checkout

브랜치에서 reset

reset에 관한 내용은 아래 링크에 자세히 정리해 두었다.

Git 정리 - 버전 관리 - reset, reflog, revert

마치며

다음은 git stash에 대해 포스팅하겠습니다.

참고문헌

이고잉, 고경희, 『Do it! 깃&깃허브 입문』 이지스퍼블리싱(2019)

Git 정리 - 버전 관리 - checkout

Git 정리 - 버전 관리 - reset, reflog, revert


'Git' 시리즈
Git에 대해 공부하고, 정리한 시리즈
작성된 댓글이 없습니다!
로그인된 사용자만 댓글을 작성할 수 있습니다.