
- 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 이 완성된다.
그림으로 표현하자면 다음과 같다.
