Git
[Git] merge 와 rebase 의 차이점
yonikim
2025. 2. 25. 14:50
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