git commit --amend
터미널에 git commit --amend
를 입력하면 가장 최근 커밋한 메시지를 수정할 수 있다. 메시지를 변경하고 저장하면 끝. git log
를 통해 변경된 내역을 확인할 수 있다.
git log
로 커밋 기록을 확인하고, 수정하고 싶은 커밋 메시지가 가장 최근 커밋에서 몇 번째인지 확인한다.
수정하고 싶은 커밋 메시지가 153. 장바구니 리듀서 추가
라면, 위(가장 최근 커밋)에서 4번째
이므로 아래와 같이 명령어를 터미널에 입력한다.
git rebase -i HEAD~4
그럼 터미널에 최신 4개의 커밋을 확인하고 수정할 수 있다. 수정하고 싶은 커밋 메시지의 앞에 있는 pick
명령어를 reword
로 수정하고 저장하면 커밋 메시지를 수정할 수 있는 또다른 창이 띄워진다. 같은 방법으로 여러 개의 커밋 메시지를 한꺼번에 수정 할 수도 있다. 그곳에서 메시지를 수정하고 저장하면 끝. 마찬가지로 git log
를 통해 변경된 내역을 확인할 수 있다.
커밋 메시지를 수정하는 방법 자체는 위와 동일하다. 경우에 따라 git commit --amend
또는 git rebase -i HEAD~
를 사용하면 된다. 다른 점은 remote branch로 push 할 때 --force
를 붙여 강제적으로 push 해야만 하는데, 강제로 push 하는 일은 지양해야 한다.
커밋 메시지 수정 후 원래 하던 대로 push를 하면 위와 같이 에러 메시지가 발생한다. 커밋 메시지를 수정하면 해당 커밋의 SHA-1 체크섬(해시값)
이 변경되는데, 이미 remote branch에 push 돼있는 기존 커밋의 해시값이 로컬에서는 다른 해시값으로 변경되면서 remote branch와 local branch의 히스토리가 일치하지 않게 된다. (아마 수정 전후의 commit을 서로 다른 별도의 commit으로 인식하게 되는 듯)
$ git log
commit ca82a6dff817ec66f44342007202690a93763949 <- SHA-1 체크섬(해시값)
Author: Scott Chacon <schacon@gee-mail.com>
Date: Mon Mar 17 21:52:11 2008 -0700
그래서 --force
를 붙여 local branch의 변경사항을 remote branch에 강제로 덮어씌워야 하는 것이다.
git push --force origin 브랜치명
그러니까 가능한 강제로 push 하는 상황이 발생하지 않도록 push 전에는 제대로 확인을 해야하고 특히나 remote branch를 공유하고 있다면 더더욱 주의해야 함!!!