[Git] Merge vs Rebase: 도대체 뭐가 좋지?

git
avatar
2025.03.09
·
7 min read

브랜치를 병합하는 방법에는 mergerebase 두 가지의 주요 전략이 있다. 지금까지는 당연하게도 merge만을 사용해왔다. 개발을 시작한 이후로 rebase를 활용하는 기업을 경험해본 적도, 적극적으로 사용하는 개발자를 만나본 적도 없었다.

최근 iOS 프로젝트를 진행하면서 rebase를 활용해 병합을 수행하는 개발자를 접하게 되어(이 방식의 장점에 대해서는 아직 충분히 공감하지 못하고 있지만..) mergerebase의 차이점과 각 방식의 장단점을 보다 체계적으로 정리해보고자 한다.


Merge와 Rebase의 개념

Merge란?

merge는 두 개의 브랜치를 병합하는 방법으로, 새로운 커밋(Merge Commit)을 생성하여 변경 사항을 통합한다.

  • 기본 원리: 공통 조상(commit)을 기준으로 두 브랜치의 변경 사항을 하나의 새로운 커밋(Merge Commit)으로 병합함.

  • 히스토리 유지: 브랜치의 커밋 히스토리가 그대로 남아 있으며, 어떤 브랜치에서 작업했는지 추적 가능.

Rebase란?

rebase는 브랜치의 변경 사항을 다른 브랜치 위에 다시 적용하는 방법이다.

  • 기본 원리: 공통 조상(commit) 이후의 변경 사항을 차례대로 새롭게 적용하여 히스토리를 선형(Linear)으로 정리함.

  • 커밋 히스토리 재구성: 기존 브랜치의 히스토리를 유지하지 않고, 마치 처음부터 한 줄로 진행된 것처럼 보이게 함.

Merge와 Rebase의 차이점

비교 항목

Merge

Rebase

커밋 히스토리

브랜치별 히스토리 유지 (비선형)

단일 라인으로 정리 (선형)

Merge Commit 생성 여부

새로운 Merge Commit 생성

새로운 Merge Commit 없음

Conflict 해결

병합 시점에서 한 번 해결

각 커밋을 적용할 때 해결

협업 시 영향

작업 내역이 명확하게 보임

히스토리가 깨끗하지만 과거 기록을 변경함

Merge vs Rebase의 장단점

Merge의 장단점

장점

  • 기존 히스토리를 유지하여 브랜치 별로 어떤 작업이 이루어졌는지 추적 가능.

  • 협업 시 충돌 해결이 한 번만 필요하여 작업 충돌이 적음.

  • GitHub 등의 협업 도구에서 Merge Commit을 통해 병합 과정을 쉽게 추적 가능.

단점

  • Merge Commit이 많아지면 커밋 히스토리가 복잡해질 수 있음.

  • 히스토리가 비선형으로 구성되어 특정 변경 사항을 추적하기 어려울 수 있음.

Rebase의 장단점

장점

  • 커밋 히스토리가 깔끔하고 선형적(Linear)으로 유지됨.

  • git log로 확인할 때 이전 작업 내역을 쉽게 이해할 수 있음.

  • 연속적인 변경 사항을 하나의 논리적인 흐름으로 정리 가능.

단점

  • 공동 작업 중에는 사용에 주의해야 함. (Rebase 후 강제 push하면 다른 팀원과 충돌 발생 가능)

  • 충돌이 발생할 경우 개별 커밋마다 해결해야 하므로 번거로울 수 있음.

언제 Merge를 사용할까?

  • 협업 환경: 여러 명이 동시에 같은 브랜치를 작업할 때.

  • 브랜치 별 작업 흐름을 명확히 유지해야 할 때 (e.g. feature, develop, release 브랜치 분리 관리).

  • 커밋 히스토리를 유지하면서 변경 사항을 추적하고 싶을 때.

언제 Rebase를 사용할까?

  • 개인 작업을 정리할 때: 로컬 브랜치에서 작업한 후 main 브랜치에 적용하기 전에 히스토리를 정리하고 싶을 때.

  • 히스토리를 깔끔하게 유지해야 할 때: 많은 작은 커밋을 하나의 흐름으로 병합할 때 유용.

  • 코드 리뷰 전에 커밋을 정리할 때 (e.g. git rebase -i 사용하여 불필요한 커밋 제거 및 정리).

Merge와 Rebase의 조합

대부분의 프로젝트는 mergerebase를 함께 활용하는 것이 최적의 방법이다.

  1. 메인 브랜치(main, develop)에는 merge를 사용하여 협업을 원활하게 유지한다.

  2. 로컬(feature) 브랜치에서는 rebase를 사용하여 히스토리를 깔끔하게 유지한다.

  3. PR(Pull Request) 전 rebase를 활용하여 커밋을 정리하면 보다 명확한 코드 리뷰가 가능하다.

결론

mergerebase는 각각 장점과 단점이 있으며, 사용 목적에 따라 적절히 선택하는 것이 중요하다.







- 컬렉션 아티클