2023년 4월 6일 작성

Git에서 과거의 Commit만 수정하는 방법 (rebase)

rebase 명령어를 사용하여 과거의 commit을 수정할 수 있습니다.

이미 저장한 과거의 Commit을 수정하기

---
title: 수정하고 싶은 상황
---
gitGraph
commit
commit
commit id: "수정하고 싶은 Commit" type: HIGHLIGHT
commit
  • rebase 명령으로 과거의 commit을 수정 이력 없이 수정할 수 있습니다.
    • 기존 commit의 수정본에 대한 새로운 commit을 만들어 교체하는 방식입니다.
      • 새로운 commit에 대해 새로운 hash 값이 만들어집니다.
  • remote 저장소에 해당 commit을 push한 적이 있다면, 수정 후 push할 때 remote commit 내역과 충돌하게 됩니다.
    • 기존의 remote commit 내역과 local에서 수정한 commit 내역이 다르기 때문입니다.

과거의 Commit을 수정하는 법

1. git log

  • 변경하려는 commit의 hash 값을 확인합니다.

2. git rebase -i [commit_hash]~1

  • rebase의 i option으로 rebase interface에 진입할 수 있습니다.
    • rebase interface에 진입할 때 수정 대상인 과거의 commit이 나오게 하려면, 대상 바로 이전의 commit hash 값을 인자에 넣어야 합니다.
    • 따라서 commit의 hash 값 뒤에 ~1을 추가하여 ‘이전 commit’의 hash값을 가져옵니다.
  • rebase interface에서 수정하고 싶은 commit의 keyword를 pick에서 edit으로 수정하고, :wq(Vim을 사용하는 경우)로 나옵니다.

3. File 수정

  • 수정하려 했던 file을 수정합니다.

4. git add [modified_file_name]

5. git commit --amend

6. git rebase --continue

  • 수정한 file에서 충돌이 발생하면 해결해야 합니다.

Reference


목차