본문 바로가기
Git

[Git] merge 와 rebase 의 차이점

by yonikim 2025. 2. 25.
728x90

 

 

`git merge` 와 `git rebase` 는 두 개의 브랜치를 합칠 때 사용하는 명령어지만, 브랜치를 통합하는 방식이 다르다. 

 

git merge 

merge 는 두 브랜치의 변경 사항을 하나로 합치는 가장 일반적인 방법이다. 병합 커밋을 생성하여 두 브랜치의 히스토리를 모두 유지한다. 

 

동작 방식

# 1. main 브랜치로 이동
git checkout main

# 2. feature 브랜치를 main 브랜치에 병합
git merge feature

 

장점

  • 간단하고 안전함: 공유된 브랜치에서도 안전하게 사용할 수 있다. 
  • 병합 기론 보존: 병합 커밋을 통해 두 브랜치가 병합되었다는 기록이 남는다.
  • 충돌 해결이 한 번만 발생: 병합 시 충돌이 발생하면 한 번만 해결하면 된다. 

단점 

  • 히스토리가 복잡해짐: 병합 커밋이 많아지면 히스토리가 복잡해질 수 있다.

예시

*   commit C (main) - Merge branch 'feature'
|\  
| * commit B (feature)
* | commit A (main)
|/  
* commit Initial

 

 

git rebase

rebase 는 한 브랜치의 커밋을 다른 브랜치의 최신 커밋 위로 재배치한다. 히스토리를 선형적으로 유지하며, 병합 커밋을 생성하지 않는다. 

 

동작 방식

# 1. feature 브랜치로 이동
git checkout feature

# main 브랜치 위로 feature 브랜치를 재배치
git rebase main

 

장점

  • 깔끔한 히스토리: 히스토리가 선형적이고 읽기 쉽다. 
  • 커밋 정리 기능: `git rebase -i` 를 사용하여 커밋을 수정하거나 합칠 수 있다.
  • 최신 상태 유지: 기능 브랜치를 기준 브랜치의 최신 상태로 유지할 수 있다. 

단점

  • 히스토리 재작성: 커밋 히스토리가 변경되므로, 공유된 브랜치에서 사용하면 문제가 발생할 수 있다.
  • 충돌 해결이 복잡: 각 커밋마다 충돌이 발생할 수 있어 해결이 더 복잡할 수 있다.

예시

* commit B' (feature) - Rebased commit B
* commit A (main)
* commit Initial

 


✅ `git merge` vs `git rebase` 정리

비교 `git merge` `git rebase`
방식 기존 브랜치에 병합 커밋(merge commit) 생성 변경 내역을 기반 브랜치로 재배치
히스토리 브랜치 구조 유지 (fork-and-merge) 커밋 히스토리가 직선으로 정리됨(linear)
충돌 해결 병합 중 발생하면 한 번만 해결 각 커밋을 적용할 때마다 충돌 해결 필요
사용 목적 협업 시 변경 이력을 명확히 남기고 싶을 때 커밋 기록을 깔끔하게 정리하고 싶을 때

 

👑 언제 어떤 것을 사용할까?

`git merge` 를 사용하는 경우:

  • 공유된 브랜치에서 작업할 때 
  • 병합 커밋을 통해 히스토리를 명확히 남기고 싶을 때 
  • 충돌 해결을 한 번만 하고 싶을 때

`git rebase`를 사용하는 경우:

  • 개인적으로 작업하는 브랜치에서 히스토리를 깔끔하게 유지하고 싶을 때
  • 기능 브랜치를 최신 상태로 유지해야 할 때
  • 커밋을 정리하거나 수정해야 할 때

 

728x90