미숑이의 블로그
블로그 홈소개

© 2025 Ryu Mi Sung. All rights reserved.

목차

상황 😅
상황을 다시 정리해보면
수습 과정
🎉 끝!
Git/GitHub

How to Undo a Git Rebase

류미성
2025년 5월 24일

https://a48kcfdnvl85xkmc.public.blob.vercel-storage.com/vercel-image-optimization-limit-1

상황 😅

작업 중인 브랜치가 있었지만, 굳이 메인 브랜치로 이동해 git rebase를 수행했더니 (과거의 나 왜 그랬니).. 작업 브랜치에 불필요한 커밋들이 섞이고 말았습니다.

이 브랜치에는 원래 작업 내용만 담겨 있어야 한다는 요청을 받아, 이전 상태로 되돌리는 작업을 진행했어요.

회사 오가니제이션의 레포지토리에 작업을 했어야 했는데, 다행히도 걱정했던 만큼 해결 과정이 어렵지는 않았습니다 :)


상황을 다시 정리해보면

  • 현재 작업 중인 브랜치: feature-branch (예시 이름)
  • 불필요한 커밋이 섞인 상태
  • 이 브랜치를 깔끔하게 정리해서 내 작업 커밋만 남기고 싶음
  • 원격 저장소는 GitHub이고 PR도 이미 올려두고 다수의 코드 리뷰도 받은 상태

수습 과정

1️⃣ 현재 feature-branch 브랜치에 있기

git branch
  • feature-branch 라고 별표(*)가 붙어있어야 함
  • 아니라면? 문제의 브랜치로 이동하기
git checkout feature-branch

2️⃣ 최신 main 브랜치 내용 받아오기

git fetch origin
  • 원격 저장소(origin)의 main 브랜치 상태를 내 로컬에 최신으로 반영해줌
  • 왜 필요한가?
    • origin/main을 기준으로 rebase할 거니까!

3️⃣ 인터랙티브 리베이스 시작하기

git rebase -i origin/main
  • origin/main 이후에 추가된 모든 커밋 목록이 터미널에 나타남

  • 어떻게 나타나는가?

    85902fc3-8d2b-4315-8e3b-5eefae8c0066.png

4️⃣ 에디터에서 커밋 목록 정리하기

  • 위 명령어를 통해 나타난 터미널에서 집중해야할 부분은 터미널 상단!
  • main 브랜치를 rebase한 이후에 생긴 마지막 2건의 커밋을 제거하고자 한다.

ad2d05c1-f811-4f2f-ba11-20bb9cfc9f5b.png

  • 두가지 방법이 있는데,
    • 방법 1: 줄 자체를 삭제

      • 리베이스 목록에서 아래 두 줄을 지운다. (하단 예시 참고)

        d5c23e6c-ba63-40d2-ac85-6d868bf736ce.png

      • 지우고 나면, 최종 목록은 하단과 같다.

        77cde466-3250-44f7-af4b-de6cf6c0d0aa.png

    • 방법 2: pick을 drop으로 바꾸기 (내가 선택한 방법 🙌)

      • i로 편집모드로 전환

        b1455d76-c30d-42f1-b48b-ffb9f6a2c011.png

      • 이후 esc로 종료하고, :wq로 저장하고 닫기

5️⃣ 리베이스 중 발생한 충돌 해결

(다행히 나는 충돌이 없었음 휴-)

6️⃣ 리베이스 완료 후, 커밋 히스토리 확인

git log --oneline

0c3ac06b-6844-443f-b041-7ea1c98ba901.png

  • 많은 로그들이 있지만 내가 봐야할 건,
    • 내 브랜치에서 작업한 커밋 4개만 딱 남았고,
    • 078c76e, 85172dd ← 이 두 개의 커밋은 사라졌다.

7️⃣ 원격 저장소에 강제로 푸시 (PR 유지됨)

git push -f origin feature-branch
  • 브랜치 히스토리를 덮어쓰기(push -f) 명령어를 하고 나면,
  • 기존 PR은 유지되며, 리뷰 기록도 그대로 있게 된다

🎉 끝!

다행히도 rebase 이전의 네 커밋이 무사히 복구되었다 ^_^

bfc06b22-32c1-43f3-bec1-7c9815a3cb80.png