DevOps
[Git] Rebase 란?
danbibibi
2025. 4. 2. 16:20
Rebase
- 브랜치의 Base Commit(= Base) 를 재설정 (= Re) 하는 명령어
- 브랜치의 커밋 히스토리를 재구성하거나 병합할 때 사용함
- 주로 더 깔끔하고 직선적인 커밋 히스토리를 유지할 수 있다는 장점이 있음
Merge vs Rebase
- Merge는 두 브랜치를 병합하면서 병합 커밋(merge commit)을 생성함
- Rebase는 병합 커밋 없이 커밋 히스토리를 재구성하여 더 깔끔한 히스토리를 만듦
# Merge
# main 브랜치로 이동
git checkout main
# feature 브랜치를 main에 병합
git merge feature
# Rebase
# feature 브랜치를 main 브랜치 위로 재배치
git checkout feature
git rebase main
# 충돌이 발생하는 경우, 수정 후
git add <파일>
git rebase --continue
rebase 사용에 관하여..
공유된 브랜치에서는 Rebase를 피하는 게 좋다고 하는데,
Rebase는 히스토리를 변경하므로, 다른 사람이 작업 중인 브랜치에 적용하면 충돌이 발생할 수 있기 때문이다. (개인 브랜치에서만 사용하는 것이 안전)
하지만 반대 의견으로 깃 히스토리가 깔끔해 진다는 장점이 있기 때문에, 많은 사람들과 협업을 할 때 리베이스를 사용하는 것을 권장하는 팀이 많다는 이야기도 있다.
--force-with-lease (git push --force-with-lease)
강제 Push의 안전한 대안, 원격 브랜치가 예상한 상태일 때만 강제 Push를 허용함 (즉, 다른 사람이 원격 브랜치를 수정한 경우 Push 실패)
* Rebase 후, 로컬 브랜치의 히스토리가 원격 브랜치와 다르기 때문에, 일반적인 git push는 실패함
-> 따라서, Rebase 후에는 강제 Push(git push --force)를 사용하여 원격 브랜치의 히스토리를 로컬 브랜치와 동일하게 덮어씌워야함