인프라 기술 및 아키텍처/Github + Git, 전략, 컨벤션

02. Git Merge (병합)

Dev.99_tale 2025. 2. 15. 01:40

Git 병합(Merge)

Git에서 병합(Merge)은 다양한 방식으로 활용할 수 있는 중요한 기능이다.

브랜치 간 작업을 통합할 때, 어떤 병합 방법을 사용할지에 따라 프로젝트의 커밋 이력과 관리가 달라지며, Git에서 자주 사용되는 병합 방식과 각 방식의 특징을 정리해 보겠다.

 

 

1.  Merge (일반 병합)

  • Merge는 가장 일반적인 병합 방식이다. 두 브랜치를 합칠 때 커밋 이력을 그대로 유지하면서 병합을 진행한다.
  • Merge는 크게 Fast-Forward 방식과 Recursive 방식으로 나눠진다.

Fast-Forward Merge (빠른 병합)

Fast-Forward Merge

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

 

Recursive Merge (병합 커밋 생성)

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를 하게 되면 모든 커밋 이력이 하나의 커밋으로 합쳐지며 사라진다는 점을 주의해야한다.

Squash & Merge

    • 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 & MergeRebase & Merge를 상황에 맞게 활용하는 것이 중요하다.

각 방법을 이해하고 활용할 때, 협업 과정에서 발생할 수 있는 혼란을 줄이고, 효율적인 작업 환경을 만들 수 있습니다.

 

참고

https://hudi.blog/git-merge-squash-rebase/

 

Git의 다양한 브랜치 병합 방법 (Merge, Squash & Merge, Rebase & Merge)

학습 배경 우아한테크코스 달록팀에서 브랜치 전략 개선과 배포와 관련된 이야기를 하면서 다양한 병합방법에 대한 이야기가 나왔다. 이야기를 해보면서, 아직 Git의 다양한 병합 방법에 대한

hudi.blog