
단순하게 새로운 커밋이 생성되지 않고, 기존 커밋을 이동하여 병합이 이루어지는 방식이다. HEAD의 위치만 변경된다.

목표 브랜치가 현재 작업 중인 브랜치보다 앞서 있다.
병합을 수행하기 전에 아무런 추가 커밋이 없다.

추가 그림


단순히 브랜치 HEAD를 앞으로(forward) 이동 시키는 방식의 브랜치 병합.
세 개의 커밋을 기반으로 병합을 수행하여 내 브랜치 커밋과 다른 브랜치 커밋을 병합하여 새로운 커밋을 생성하는 것이다.

병합하려는 두 브랜치의 공통 조상인 'B'
병합 대상 브랜치와 현재 브랜치를 비교해보면 'main'에서는 'B'이후에 'C'가 추가, 'feature' 에서는 'D','E'가 추가.
변경 내용이 서로 겹치지 않고 'main'브랜치에서의 추가 커밋이 'C'라면 3-way merge 가능
'main' 브랜치를 'feature'의 가장 최신 커밋인 'E'로 이동 시킨 후, 새로운 병합 커밋 'F'를 생성.

여러 개의 연속된 커밋을 하나의 커밋으로 합치는 Git 작업.
이를 통해 Git 히스토리를 보다 간결하고 이해하기 쉽게 만들 수 있습니다. Squash를 사용하면 여러 작은 커밋들을 하나의 큰 의미 있는 커밋으로 합쳐서 히스토리를 정리할 수 있다.


Squash와 Rebase 차이
쉽게말해 Squash 는 통합커밋 딱 하나를 master 브랜치 뒤에 붙여주는 방식이고, Rebase 는 서브브랜치의 여러 커밋들을 뒤에 붙여주는 방식이다.


Rebase는 하나의 브랜치가 다른 브랜치에서 파생되서 나온 경우 다른 브랜치의 커밋을 다시 가져와서 Base를 재설정하는 것.
Rebase를 사용하면 다른 브랜치의 최신 커밋을 현재 브랜치의 최신 커밋 위에 적용하게 되어 히스토리가 선형적으로 나타나게 되고 불필요한 머지 커밋이 줄어들게 된다.
Fast-Forward는 브랜치 간의 병합을 할 때 커밋이 생기지 않고 merge 하려는 브랜치의 HEAD 커밋이 병합되는 브랜치의 HEAD 커밋으로 이동하는 방식이다. 단순하게 커밋 이동을 한다고 생각하면 된다.
Reference
🔗 https://velog.io/@suk13574/Git-3-way-merge-%EB%8D%94-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0 - [Git] 3-way merge 더 알아보기
🔗https://www.youtube.com/playlist?list=PLuHgQVnccGMA8iwZwrGyNXCGy2LAAsTXk - Git 유튜브 설명
🔗 https://seokzin.tistory.com/entry/Git-merge%EC%9D%98-%EC%A2%85%EB%A5%98-Fast-forward-3-way-merge - Merge 종류