git merge 사용 시 명령어 순서
1. 충돌 발생 X
- git merge { target_branch }
- target_branch를 current_branch로 merge 하겠다.
- git push ( --no-verify )
- git push: pre-push hook & pre-push check 실행 / 안정성 ↑, 속도 ↓
- git push --no-verify: pre-push hook & pre-push check 실행 X / 안정성 ↓, 속도 ↑
2. 충돌 발생 O
- git merge { target_branch }
- 충돌 처리
- git commit
- git push ( --no-verify )
merge 종류
- merge를 하는 데 있어 중요한 것은 베이스가 되는 커밋이 어떤 커밋인지이다.
(이하 베이스가 되는 커밋은 베이스로 통일한다.)
1. fast-forward
- 타깃 브랜치의 베이스 위로 쌓인 커밋이 없고, 병합할 브랜치의 베이스 위로는 쌓인 커밋이 있을 때 머지를 하면 fast-forward 방식이다. 이렇게 머지가 진행되면 머지 커밋 메시지는 생성되지 않고 자연스럽게 위로 쌓인다. 이때 머지 메시지를 생성하고 싶으면 "--no-ff" 옵션을 사용하면 된다.
fast-forward 방식의 머지가 진행된다면 충돌은 발생하지 않는다.
2. 3 way merge
- 우리가 기본적으로 사용하는 머지는 3 way merge를 활용한다고 생각하면 된다. 머지 커밋이 생성된다. 머지 중 충돌이 발생하는 경우는 3 way merge가 진행되는 경우이다.
충돌이 발생하는 경우를 알아보자.

위의 그림에서 봤을 때 베이스는 C2이다.
master 브랜치는 C2 커밋 이후로 C4 커밋이 하나 푸쉬된 상태이다.
C2를 베이스로 iss53 브랜치가 생성되었고 거기에서는 C3와 C5가 푸쉬되었다.
C2 이후로 타깃 브랜치(master)에 커밋이 하나 더 푸쉬되었기 때문에 지금 진행하려고 하는 merge는 3 way merge가 된다.
충돌이 발생하는 경우는 C2 이후에 진행된 C4 커밋과 따로 브랜치를 생성해서 진행한 iss53 브랜치의 C5 커밋 중에서 같은 파일이 수정되었을 경우 충돌이 발생하는 것이다.
'GIT' 카테고리의 다른 글
| git reflog (1) | 2023.10.24 |
|---|---|
| git rebase (0) | 2023.08.30 |
| 초기 설정 + 기초 명령어 (0) | 2023.08.24 |
| GIT? + 용어 + 설치 (0) | 2023.08.24 |