튜토리얼 3: 커밋을 변경해보자!

6. rebase -i 로 커밋 수정하기

이 튜토리얼에서는 사전에 이력이 준비되어 있는 로컬 저장소를 사용합니다.

여기에서 다운로드 해 주십시오.

위에서 다운로드 한 stepup-tutorial/tutorial6 폴더로 이동합니다. 이 저장소의 이력은 다음 그림과 같습니다. 이번에는 「commit의 설명을 추가」한 커밋을 수정해 보도록 하겠습니다.

저장소 이력

'rebase -i' 를 사용하여 수정할 커밋을 선택합니다.

$ git rebase -i HEAD~~

텍스트 에디터가 열리고, 'HEAD'에서 'HEAD~~' 까지의 커밋이 다음과 같이 표시됩니다.

pick 9a54fd4 commit의 설명 추가
pick 0d4a808 pull 설명을 추가

# Rebase 326fc9f..0d4a808 onto d286baa
#
# Commands:
#  p, pick = use commit
#  r, reword = use commit, but edit the commit message
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#  f, fixup = like "squash", but discard this commit's log message
#  x, exec = run command (the rest of the line) using shell
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#

첫 번째 줄의 'pick' 문자를 'edit'으로 변경하여 저장 · 종료합니다. 그러면 다음과 같은 출력 되고 수정할 커밋이 체크아웃된 상태가 됩니다.

Stopped at d286baa... commit의 설명 추가
You can amend the commit now, with

        git commit --amend

Once you are satisfied with your changes, run

        git rebase --continue

sample.txt 를 열어, commit 의 설명 부분을 적당히 변경합니다.

원숭이도 이해할 수 있는 Git 명령어
add: 변경 사항을 만들어서 인덱스에 등록해보기
commit: 인덱스의 상태를 저장하기
pull: 원격 저장소의 내용을 가져오기

commit --amend 를 실행하여 변경한 내용을 저장합니다.

$ git add sample.txt
$ git commit --amend

commit 을 실행했다고 해서 rebase 작업이 끝난 것은 아닙니다. 이 커밋 작업이 종료했다는 것을 알리려면, --continue 옵션을 지정하여 rebase 를 실행해야 합니다.

$ git rebase --continue

Note

이 때, 다른 커밋에서 충돌이 발생할 수 있습니다. 그럴 때에는 충돌 부분을 수정한 후 add 와 rebase --continue를 실행하면 됩니다. 이 때, 커밋은 필요 없으므로 실행하지 않습니다. 만약 도중에 rebase 작업을 중지하고자 하는 경우에는 rebase에 --abort 옵션을 지정하여 실행하면 됩니다.

이제 커밋 수정이 완료 되었습니다.

Note

rebase 전의 커밋은 'ORIG_HEAD'라는 이름으로 남아 있습니다. 만약 rebase 한 후 원래대로 되돌리고자 하는 경우에는 'git reset --hard ORIG_HEAD'을 실행하여 rebase 전의 상태로 되돌릴 수 있습니다.