본문 바로가기
Git&GitHub

[GIT 12] 브랜치 병합하기 - 같은 문서의 같은 위치를 수정했을 때 병합하기

by 어쩌다개발 2023. 1. 21.
반응형

참고 : Do It! 깃&깃허브 입문

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

1) manual-4라는 깃 저장소를 만들고, manual-4 디렉터리로 이동한다.

git init manual-4
cd manual-4

2) work.txt 파일을 아래와 같이 입력한다.

vim work.txt

3) work.txt 를 스테이지에 올리고 커밋한다. 커밋 메세지는 'work 1'이라고 한다.

git add work.txt
git commit -m "work 1"

4) o2라는 브랜치를 만든다.
o2 브랜치는 만들어지면서 master 브랜치의 최근 커밋을 가져온다.
즉, o2와 master 두 브랜치에 work.txt 가 존재한다.

git branch o2

5) 아직 'o2'로 checkout 하지 않았으므로, 현재 브랜치는 'master' 이다.
master에서 work.txt 를 아래와 같이 수정한 후 master work 2 커밋 메세지를 입력한다.

vim work.txt
git commit -am "master work 2"

6) o2 브랜치로 checkout 한 뒤, work.txt 파일을 아래와 같이 수정한다. 그리고 'o2 work 2'로 커밋한다.

git checkout o2
vim work.txt
git commit -am "o2 work 2"

7) master 브랜치와 o2 브랜치 양쪽에서 work.txt 파일을 수정했고, 수정 위치가 같다. 우선 o2 브랜치를 master 브랜치에 병합하기 위해 먼저 master 브랜치로 checkout 한다.

git checkout master

8) git merge 명령어를 사용해 o2 브랜치를 master 브랜치로 끌어온다. 이전에 git merge 명령을 실행했을 때처럼 자동으로 vim 이 열리지 않고 메세지가 나타난다. 이 메세지는 work.txt를 자동으로 병합하는 동안 충돌(conflict)이 발생했다는 뜻이다.

git merge o2

9) 충돌이 생긴 문서는 자동으로 병합될 수 없으므로 사용자가 직접 충돌 부분을 해결한 후 커밋해야 한다. 우선 work.txt 파일을 열어본다.

vim work.txt

10) 내용을 원하는대로 수정했으면 문서에 나타나 있던 '<<<<<< HEAD' 와 '>>>>>>o2', '========' 은 삭제한다. 삭제 후 문서를 저장하고 편집기를 종료한다.

11) 수정이 완료되면 스테이지에 올리고 commit 하면 된다. 커밋 메세지는 "merge o2"로 한다.

git commit -am "merge o2"

12) git log 명령어로 지금까지 만든 브랜치와 커밋의 관계를 확인한다.

git log --oneline --branches --graph

 

TIP) 병합 및 충돌 해결 프로그램

프로젝트 규모가 클수록 브랜치가 많으므로 브랜치에서 병합해야 할 파일도 많아진다. 그래서 깃의 브랜치 병합을 자동으로 처리해 주고 충돌을 해결해주는 프로그램들이 있다. 병합 알고리즘에는 2 way merge 와 3 way merge 가 있는데 3 way merge 가 훨씬 효율적이므로 3 way merge를 지원하는 프로그램을 선택하는 것이 좋다.

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

댓글