- git
branch
를 다른branch
로 합치는 과정을 -merge
라 한다.merge
의 기본 단위는branch
이며,git merge
명령어로는commit
단위로 합치기가 불가능하다.
🧑💻 명령어
$ git switch {현재 브랜치}
$ git merge {대상 브랜치}
❗️merge strategy는 다양하지만 특수성이 강한 전략이 많기에 이 글에선 제일 기본적인 fast-forward-merge 내용만 다룬다.
- 가장 기본적인
merge
종류- 현재
branch
의HEAD
가 대상branch
의HEAD
까지 옮기는merge
방식
✏️ 예제
다음과 같은 git log
가 있다.
feature-view
브랜치의 HEAD
는 세 번째 commit
에 있고, main
브랜치의 HEAD
는 두 번째 commit
에 있는 상황이다.
commit 7d22697cd209462e764fb84ecb9a02fe96648d1d (HEAD -> feature-view, origin/feature-view)
Author:
Date: Tue May 16 13:12:48 2023 +0900
third
commit c05e3e58c16da0058e716ebbf396def9a95d6c81 (origin/main, origin/HEAD, main)
Author:
Date: Fri May 12 16:32:37 2023 +0900
second
commit 5369298a0a2fd78382cc72422b82e3170e27db4c
Author:
Date: Fri May 12 16:29:47 2023 +0900
first
그림으로 표현하면 다음과 같다.
📄 결과
우리가 할 것은, main
의 HEAD
를 feature-view
의 HEAD
로 옮기는 것이다.
# main 브랜치로 변경
$ git switch main
# main 브랜치에서 대상 브랜치의 작업물을 merge (대상 브랜치의 HEAD로 옮기기)
$ git merge feature-view
git log
결과는 다음과 같다.
commit 7d22697cd209462e764fb84ecb9a02fe96648d1d (HEAD -> main, origin/feature-view, feature-view)
Author:
Date: Tue May 16 13:12:48 2023 +0900
third
commit c05e3e58c16da0058e716ebbf396def9a95d6c81 (origin/main, origin/HEAD)
Author:
Date: Fri May 12 16:32:37 2023 +0900
second
commit 5369298a0a2fd78382cc72422b82e3170e27db4c
Author: KwonWonHyun <whkwon@keypair.co.kr>
Date:
first
세 번째 commit
에 main
브랜치의 HEAD
가 옮겨진 것을 확인할 수 있다.
그림으로 표현하면 다음과 같다.
🔔 참고
fast-forward-merge
는 중간에 변경이 없을 때만 작동한다.
아래 그림을 보면 알듯이, 만약에 중간에 다른 commit
이 껴있고, 해당 commit
이 같은 부분을 수정했다면, conflict
가 일어나 제대로 merge
가 되지 않는다.
이를 해결하기 위해 merge commit
을 사용하여 제어한다.
일단 merge
가 끝나면 git status
는 both modified
라는 상태로 변경되며, conflict
가 발생한 파일에 다음과 같이 생겨난다.
<<<<<<<< HEAD
현재 브랜치의 변경 사항
========
>>>>>>>> feature-layout
merge 대상 브랜치의 변경 사항
이 두 개의 변경 사항 중 하나를 택해야 한다.
<<<<<<<<
, ========
, >>>>>>>>
를 모두 제거 한 후 둘 중 하나를 반영하거나 혹은 vscode
기준 버튼으로 제공해준다.
다시 해당 파일을 git add
한 후 git commit
하게 되면 merge commit
이 완성된다.
그림으로 표현하자면 다음과 같다.