Git Rebase vs Merge
마지막 업데이트
git merge와 git rebase는 둘 다 한 브랜치의 작업을 다른 브랜치로 합칩니다. git merge는 두 히스토리를 병합 커밋으로 묶어 무슨 일이 있었는지 정확히 보존합니다. git rebase는 여러분의 커밋을 하나씩 다른 브랜치 위에 다시 적용해 깔끔하고 선형적인 히스토리를 만들지만, 그 과정에서 커밋을 다시 씁니다.
황금률: 다른 사람이 이미 pull한 커밋은 절대 rebase하지 마세요. 두 가지 모두 터미널 플레이그라운드에서 시도해 보세요 — 브라우저 안의 진짜 셸입니다.
나란히 비교
| Behavior | git merge | git rebase |
|---|---|---|
| 히스토리 모양 | 병합 커밋이 있는 분기 형태 | 선형 |
| 커밋을 다시 씀 | 아니요 | 예 |
| 공유 브랜치에서 안전함 | 예 | 아니요 |
| 정확한 히스토리를 보존함 | 예 | 아니요 |
| 언제 병합됐는지 추적하기 쉬움 | 예 | 더 어려움 |
구문
| Command | What it does |
|---|---|
git merge feature | feature를 현재 브랜치에 병합 |
git merge --no-ff feature | 항상 병합 커밋을 생성 |
git rebase main | 현재 브랜치의 커밋을 main 위에 다시 적용 |
git rebase -i HEAD~3 | 최근 커밋 3개를 대화형으로 편집 |
git rebase --abort | 진행 중인 rebase를 취소 |
Git rebase vs merge 자주 묻는 질문
git rebase와 git merge의 차이는 무엇인가요?
git merge는 두 브랜치의 히스토리를 잇는 새 병합 커밋을 생성해 둘을 합치며, 무슨 일이 있었는지에 대한 정확한 기록을 유지합니다. 반면 git rebase는 여러분의 커밋을 다른 브랜치 위에 다시 적용되도록 옮겨 일직선 히스토리를 만들지만, 그 커밋들을 새 해시로 다시 씁니다. merge는 히스토리를 보존하고, rebase는 깔끔함을 위해 히스토리를 다시 씁니다.언제 merge를 쓰고 언제 rebase를 써야 하나요?
완성된 브랜치(특히 공유된 것)를 통합할 때는 merge를 쓰세요 — 안전하고 비파괴적입니다. 공유하기 전에 자신의 로컬 커밋을 정리하거나, 기능 브랜치를 최신
main 위로 업데이트해 깔끔한 히스토리를 만들 때는 rebase를 쓰세요. 많은 팀이 로컬에서 rebase한 뒤 main에 merge합니다.rebase의 황금률은 무엇인가요?
다른 사람이 이미 작업의 기반으로 삼은 커밋 — 보통 공유 브랜치에 push한 모든 것 — 은 절대 rebase하지 마세요. rebase는 커밋을 다시 쓰기 때문에, 그렇게 하면 다른 모든 사람이 갈라진 히스토리를 맞춰야 합니다. 로컬의 push하지 않은 커밋에는 자유롭게 rebase하고, 이미 공개된 것에는 merge(또는 revert)를 사용하세요.
rebase와 merge 중 어느 쪽이 충돌이 더 적나요?
둘 다 충돌을 피하지는 못하지만, 충돌이 드러나는 방식이 다릅니다. merge는 병합 커밋에서 모든 충돌을 한 번에 해결합니다. rebase는 각 커밋이 다시 적용될 때마다 커밋 단위로 충돌 해결을 요구할 수 있습니다. 총 작업량은 비슷하며, rebase는 그것을 나누어 분산할 뿐입니다.
이걸 온라인에서 연습할 수 있나요?
네. 터미널 플레이그라운드를 열면 브라우저 안의 진짜 셸에서
git merge와 git rebase를 실행할 수 있습니다 — 설치할 것이 없습니다. Coddy의 무료 대화형 Git 강좌에서도 병합과 rebase를 단계별로 다룹니다.