본문 바로가기

GIT

git merge

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가 진행되는 경우이다.

  충돌이 발생하는 경우를 알아보자.

출처: git-scm

 

  위의 그림에서 봤을 때 베이스는 C2이다.

  master 브랜치는 C2 커밋 이후로 C4 커밋이 하나 푸쉬된 상태이다.

  C2를 베이스로 iss53 브랜치가 생성되었고 거기에서는 C3와 C5가 푸쉬되었다.

  C2 이후로 타깃 브랜치(master)에 커밋이 하나 더 푸쉬되었기 때문에 지금 진행하려고 하는 merge는 3 way merge가 된다.

  충돌이 발생하는 경우는 C2 이후에 진행된 C4 커밋과 따로 브랜치를 생성해서 진행한 iss53 브랜치의 C5 커밋 중에서 같은 파일이 수정되었을 경우 충돌이 발생하는 것이다.

728x90

'GIT' 카테고리의 다른 글

git reflog  (1) 2023.10.24
git rebase  (0) 2023.08.30
초기 설정 + 기초 명령어  (0) 2023.08.24
GIT? + 용어 + 설치  (0) 2023.08.24