danbibibi
article thumbnail
Published 2025. 4. 2. 16:20
[Git] Rebase 란? DevOps

1. Rebase

  • 브랜치의 Base Commit(= Base) 를 재설정 (= Re) 하는 명령어
  • 브랜치의 커밋 히스토리를 재구성하거나 병합할 때 사용함
  • 주로 더 깔끔하고 직선적인 커밋 히스토리를 유지할 수 있다는 장점이 있음

 

2. Merge vs Rebase

  • Merge는 두 브랜치를 병합하면서 병합 커밋(merge commit)을 생성함
  • Rebase는 병합 커밋 없이 커밋 히스토리를 재구성하여 더 깔끔한 히스토리를 만듦
<bash />
# 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)를 사용하여 원격 브랜치의 히스토리를 로컬 브랜치와 동일하게 덮어씌워야함
profile

danbibibi

@danbibibi

꿈을 꾸는 시간은 멈춰 있는 것이 아냐 두려워하지 마 멈추지 마 푸른 꿈속으로