Reword a commit message | 커밋 메시지 수정하기

커밋 메시지에 오타를 냈다고 합시다.

$ git commit -m ‘Fx the bugz’

이런! 오타가 났습니다.

$ git commit –amend

이 커맨드는 커밋 에디터를 실행합니다. 단순히 가장 최근의 커밋 메시지를 고치기만 하면 끝입니다. 하지만 커밋을 여러 번 한 후에 오타를 알아차렸다면 어떻게 해야할까요?

먼저, 몇 번째 전의 커밋인지 확인합니다:

$ git log

head(브랜치의 현재 상태)로부터 3개 이전의 커밋에 오타가 있다고 합시다.

$ git rebase HEAD~3 -i

이제 최근 3개의 커밋을 볼 수 있습니다. 오타가 있는 커밋을 찾아서 pick을 reword로 바꿉니다. 에디터로 메시지를 수정하면 커밋이 업데이트됩니다.

참고: 이 작업은 깃 히스토리를 덮어쓰기 때문에 만약 이 브랜치에서 이전에 푸시한 것이 있다면 –force 옵션으로 푸시를 해서 새로운 커밋을 리모트에도 업데이트합니다.

 

주석.

처음 해보면 rebase 커맨드 이후의 화면에 굉장히 낯설게 느껴질 수 있기 때문에 조금 보충합니다. 이 화면에서 보이는 것은 텍스트 파일을 vim으로 수정하는 것과 비슷하게 생각하면 됩니다. 상단에 보이는 여러 커밋들 중, 오타가 있는 커밋의 pick을 reword로 수정하고 :wq로 나갑니다. 방금 pick을 reword로 바꾼 커밋의 커밋 메시지를 수정하는 화면이 자동으로 실행됩니다. -m 옵션 없이 커밋을 했을 때 커밋 메시지를 적어주는 것과 비슷합니다. 커밋 메시지를 수정한 뒤 :wq로 나갑니다. 이제 로컬은 커밋 메시지가 수정된 상태입니다. 이 작업은 로컬의 깃 히스토리를 덮어쓰기 때문에, 리모트의 깃 히스토리와 차이가 생깁니다. 이후 –force 옵션으로 푸시를 하면 리모트의 히스토리도 수정되지만, protected 브랜치는 히스토리를 덮어쓸 수 없기 때문에 –force 옵션으로 푸시를 할 수 없습니다. 이 경우에는 풀을 한 번 하여 머지를 한 뒤에 푸시를 다시 해야합니다. 이후 리모트의 히스토리를 확인해보면 (rebase HEAD~3 -i 인 경우), 세 개의 최근 커밋이 그대로 있고, 수정된 커밋을 포함한 세 개의 최근 커밋이 그 위에 있습니다. A B C 커밋 메시지를 A B’ C로 수정했다면, 히스토리에 A B C A B’ C가 나타납니다. 히스토리가 지저분해집니다. 마스터 브랜치에 바로 작업하면 안될 이유가 하나 더 생겼네요. 한편, 한 번에 여러 개의 커밋 메시지를 수정하고 싶을 때는 여러 개의 pick을 reword로 수정합니다. 그러면 커밋 메시지를 수정하는 화면에 순차적으로 나타납니다. 오래된 커밋 부터 나타나는지 순서는 기억이 잘 안나네요. 어차피 메시지 보고 수정하실테니 상관 없을 듯합니다.

 

원문: https://coderwall.com/p/_thg9a/reword-a-git-commit-message

192 Comments