생활코딩 git 05 - git 병합(merge) / 충돌(merge conflict)
05 Apr 2017 | git생활코딩-git 수업을 듣고 중요 내용을 정리합니다.
병합
B 브랜치를 A 브랜치로 병합(merge)할 때 (B => A)
$ git checkout A
$ git merge B
병합(merge) 확인
❯ git log --branches --graph --decorate --oneline
* d66cc18 (HEAD -> master) Merge branch 'exp'
|\
| * 7ba6cb1 (exp) 6
| * 019d8ce 5
| * d239731 4
| * 410316d 3
* | 2e6dadd 7
|/
* db667dd 2
* 932645b 1
B 브랜치를 삭제할 때
$ git branch -d B
Deleted branch B (was d66cc18).
충돌
- merge 과정에서 파일의 이름이 같으면 충돌이 발생한다.
- 파일이 다르면 무조건 자동으로 합쳐준다.
- 파일이 같아도 수정한 부분이 다르다면 자동으로 합쳐준다. (버전관리를 사용하는 정말 중요한 이유중의 하나)
충돌이 생기면 아래와 같은 메시지가 뜬다.
❯ git merge exp
Auto-merging common.txt
CONFLICT (content): Merge conflict in common.txt
Automatic merge failed; fix conflicts and then commit the result.
git status를 하면 충돌이 일어난 파일을 찾을 수 있다.
❯ git status
On branch master
You have unmerged paths.
(fix conflicts and run "git commit")
(use "git merge --abort" to abort the merge)
Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: common.txt
no changes added to commit (use "git add" and/or "git commit -a")
충돌이 발생한 파일을 수정한다.
- 개발자가 직접 둘 중에 어느 수정 사항을 반영할 것인지 판단하여 수정
merge conflict 발생 후 common.txt 파일 상태
- 이 정보를 참고로해서 두개의 코드를 병합한 후에 특수기호들을 제거한다.
- 수정 후 add, commit 진행하면 정상적으로 merge commit이 진행된다.
❯ vim common.txt
1 function b
2 <<<<<<< HEAD # 현재 checkout 한 브랜치의 상태
3 fucntion a(master)
4 ======= # 구분자 ====================
5 fucntion a(exp)
6 >>>>>>> exp # 병합하려는 대상인 exp 브랜치의 상태
7
8 function c