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를 단계별로 다룹니다.