생활코딩 git 05 - git 병합(merge) / 충돌(merge conflict)

|

생활코딩-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