Git 병합(Merge)
Git에서 병합(Merge)은 다양한 방식으로 활용할 수 있는 중요한 기능이다.
브랜치 간 작업을 통합할 때, 어떤 병합 방법을 사용할지에 따라 프로젝트의 커밋 이력과 관리가 달라지며, Git에서 자주 사용되는 병합 방식과 각 방식의 특징을 정리해 보겠다.
1. Merge (일반 병합)
- Merge는 가장 일반적인 병합 방식이다. 두 브랜치를 합칠 때 커밋 이력을 그대로 유지하면서 병합을 진행한다.
- Merge는 크게 Fast-Forward 방식과 Recursive 방식으로 나눠진다.
Fast-Forward Merge (빠른 병합)

- 조건 : 병합하려는 브랜치가 기준 브랜치의 최신 상태일 때
- 작동 방식 : 새로운 커밋 없이, 브랜치 포인터만 이동하는 방식이다. 이 경우 커밋 이력에 병합 커밋이 생기지 않는다.
git checkout main
git merge my-branch
Recursive Merge (병합 커밋 생성)

- 조건 : 병합하려는 브랜치가 기준 브랜치에서 분기되었고, 그 사이에 기준 브랜치에 새로운 커밋이 있을 경우
- 작동 방식 : 공통 부모를 기준으로 새로운 병합 커밋(Merge Commit)을 생성한다.이때 Fast-Forward Merge가 가능하지만, 병합 커밋을 남기려면 --no-ff 옵션을 사용한다.
git checkout main
git merge my-branch
이때 Fast-Forward Merge가 가능하지만, 병합 커밋을 남기려면 --no-ff 옵션을 사용한다.
git merge --no-ff my-branch
2. Squash & Merge (스쿼시 병합)
- Squash는 여러 커밋을 하나의 커밋으로 합치는 방법이다.
- 이 방식은 여러 작업 커밋을 하나의 커밋으로 묶어 병합한다.
- 이 때, 기존의 커밋 이력은 사라지고 하나의 새로운 커밋이 추가된다.
- Squash를 하게 되면 모든 커밋 이력이 하나의 커밋으로 합쳐지며 사라진다는 점을 주의해야한다.

-
- feature → develop 병합 시, 여러 작은 커밋들을 하나로 정리하여 기능 단위로 관리
- 병합 후 feature 브랜치 삭제.사용 예시
git checkout main
git merge --squash my-branch
git commit -m "squash & merge"
3. Rebase & Merge (리베이스 병합)
- Rebase는 특정 브랜치를 새로운 기준(Base) 위로 다시 적용하는 방식입니다.
(이 방법을 사용하면 브랜치 이력을 깔끔하게 정리할 수 있지만, 기존 커밋이 변경되므로 주의가 필요하다.) - Rebase는 커밋을 기존의 기준이 아닌 최신 커밋을 기준으로 재정렬하여, 이력을 깔끔하게 유지할 수 있도록 한다.

- 주의 : Rebase를 사용하면 기존 커밋의 해시가 변경될 수 있어, Force Push(강제)가 필요할 수 있다.
- 작동 방식
git checkout my-branch
git rebase main
git checkout main
git merge my-branch
이 명령어는 병합 커밋이 발생한다면 Fast-Forward Merge가 발생할 수 있다.
4. 어떤 방식으로 병합(Merge)하면 좋을까?
| 병합 대상 | 추천 방식 | 이유 |
| feature → develop | Squash & Merge | 여러 작업 커밋을 기능 단위로 정리하고, feature 브랜치는 삭제되어 Merge Commit을 남길 필요 없음 |
| develop → main | Rebase & Merge | 커밋 이력을 깔끔하게 유지하고, Merge Commit 없이 정리된 이력을 유지 |
- 기본 병합 : Fast-Forward Merge
- 여러 커밋을 하나로 합침 : Squash & Merge
- 이력을 유지하면서 최신 상태로 정리 : Rebase & Merge
추가내용 - Merge와 Rebase를 헷갈려 하는 사람들을 위한 간단한 표
| Merge | Rebase | |
| 커밋 히스토리 | 병합(commit) 기록이 남음 | 히스토리가 깔끔하게 정리됨 |
| 협업 | 여러 개발자가 작업할 때 유리 | 혼자 작업할 때 주로 사용 |
| 충돌 해결 | Merge 시점에서 한 번에 해결 | 커밋마다 개별적으로 해결 필요 |
| 원격 브랜치 | 기존 커밋을 유지하므로 안전 | 기존 커밋이 변경되므로 Force Push 필요할 수도 있음 |
| 주요 사용 상황 | 협업 시, 개발 과정 기록을 유지할 때 | 개인 작업, 깔끔한 Git 히스토리를 만들고 싶을 때 |
정리
Git에서 병합 방법은 프로젝트의 관리 방식에 따라 적절하게 선택해야 한다.
각 Merge 방식은 커밋 이력의 깔끔함과 관리의 용이성에 큰 영향을 미치므로, Squash & Merge와 Rebase & Merge를 상황에 맞게 활용하는 것이 중요하다.
각 방법을 이해하고 활용할 때, 협업 과정에서 발생할 수 있는 혼란을 줄이고, 효율적인 작업 환경을 만들 수 있습니다.
참고
https://hudi.blog/git-merge-squash-rebase/
Git의 다양한 브랜치 병합 방법 (Merge, Squash & Merge, Rebase & Merge)
학습 배경 우아한테크코스 달록팀에서 브랜치 전략 개선과 배포와 관련된 이야기를 하면서 다양한 병합방법에 대한 이야기가 나왔다. 이야기를 해보면서, 아직 Git의 다양한 병합 방법에 대한
hudi.blog
'인프라 기술 및 아키텍처 > Github + Git, 전략, 컨벤션' 카테고리의 다른 글
| 03. Git Branch 전략 (Git flow) (1) | 2025.02.15 |
|---|---|
| 01. Git Convention (commit활용법) (1) | 2025.02.15 |