git rebase --onto

Written by Chat GPT 5

Git Rebase --onto 완벽 가이드

Rebase --onto란 무엇인가

git rebase --onto특정 구간의 커밋만 떼어내어 새로운 베이스 위에 재배치하는 강력한 도구입니다. 단순 git rebase와 달리, “어디까지를 잘라낼지”와 “어디 위에 붙일지”를 모두 명시할 수 있습니다.

명령어 형식은 다음과 같습니다.

git rebase --onto <NEWBASE> <UPSTREAM> [<BRANCH>]

직관적 이해

머릿속에 그리면 이렇게 됩니다.

전 상태:
      U0──U1──U2  (origin/dev)
                  \
                   A──B──C  (feature)

원하는 상태:
      M0──M1  (origin/main)
              \
               A'──B'──C' (feature rebased)

즉, origin/dev..feature에 속하는 A, B, C만 골라 origin/main 위로 옮기는 것입니다.


실무 시나리오: dev 머지가 섞인 feature를 main으로 보내야 할 때

자주 있는 케이스는 다음과 같습니다.

  1. feature를 dev에서 분기했음
  2. dev가 main보다 먼저 갱신됨
  3. feature에 dev를 머지했더니, feature → main PR에 dev의 커밋까지 섞여버림

이 경우 해결책은:

git fetch --all
git switch feature
git rebase --onto origin/main origin/dev feature
git push --force-with-lease

이제 feature는 main을 기반으로 하고, feature 고유 커밋만 남습니다.


활용 패턴 모음

브랜치 베이스 갈아타기

git rebase --onto origin/main origin/dev topic

topic을 dev에서 파생했는데 main으로 타겟을 바꾸고 싶을 때.

중간 구간 삭제

git rebase --onto B D branch

브랜치의 C, D를 빼고 E, F만 이어 붙이는 효과.

마지막 N개 커밋만 옮기기

git rebase --onto newbase HEAD~N

가장 최근 N개만 새로운 베이스로 옮김.

feature 전용 커밋만 유지

git rebase --onto origin/main origin/dev feature

dev와 겹치는 부분은 버리고 feature만 main 위에 올림.


안전하게 사용하는 방법

  1. 백업 브랜치 생성

    git branch backup/feature
    
  2. 리베이스 전 상태 확인

    git log --oneline --graph --decorate --all
    
  3. 리베이스 후 검증

    git range-diff origin/dev..feature@{1} origin/main..feature
    git diff origin/main...feature
    
  4. 문제 시 복원

    git reflog
    git reset --hard backup/feature
    

충돌 처리 요령

충돌이 많다면 cherry-pick 전략으로 나누어 처리하는 것도 좋습니다.


merge와의 차이


브랜칭 전략에서의 교훈