본문 바로가기

Git

[Git] 커밋 메세지 수정하기

Spring Boot를 이용한 RESTful Web Services 개발 강의를 들으며 개인 레포에 코드를 작성하던 중 커밋에 오타가 났다.

가장 최신의 커밋을 수정하면 되어서 IntelliJ의 Git 툴 중 Amend 사용을 시도했지만..

Merge되면서 다음과 같은 모습이 되었다. (세상 못생김)

해결방법


  1. 오타가 난 커밋으로 되돌아간다.
  2. 가장 최근 커밋을 수정한다.
  3. 원격 저장소에 푸시한다.

1. 오타가 난 커밋으로 되돌아간다.

git revert <되돌릴_커밋>
  • 되돌린 커밋을 나타내는 커밋 로그 메시지와 함께 일부 커밋을 자동으로 만든다.
  • 이 플래그는 명명된 커밋을 작업 트리와 인덱스로 되돌리는 데 필요한 변경 사항을 적용하지만 커밋은 하지 않는다.

적용된 모습

revert가 적용된 모습

2. 가장 최근 커밋을 수정한다.

git commit --amend -m <커밋 메세지>
  • revert 후 가장 최근 커밋이었기 때문에 다른 옵션 사용 없이 --amend를 사용했고 -m 옵션으로 커밋 메세지를 작성했다.
    refact: 미디어 타입을 이용한 버전 관리
  • 가장 최근의 커밋이 아니라면 rebase 사용하여 커밋 내용을 수정하면 된다.

3. 원격 저장소에 푸시한다.

git push --force <브랜치명>
  • 나는 이미 커밋을 push해 remote에 올린 상황이었다. 이런 상황에선 강제 푸시를 통해 커밋을 찍을 수 밖에 없는데 깃헙에서는 이러한 부분을 최대한 지양할 것을 권고한다. 그 이유는 내가 git push --force 한 이후 내 레포를 클론한 모든 이들이 수동적으로 자신의 로컬 히스토리를 수정해야하기 때문이다.

We strongly discourage force pushing, since this changes the history of your repository. If you force push, people who have already cloned your repository will have to manually fix their local history. For more information, see "Recovering from upstream rebase" in the Git manual.

적용된 모습


깨달은 점


솔직히 커밋 메세지에 오타가 난 경우가 이번이 처음이 아니었다. 이번에도 그냥 넘어가려고 하다 git에 대한 이해도를 넓히기 위함이 주 목적이었던 시도였다. remote의 push를 적용한 뒤엔 --force를 적용하는 방법 외 다른 방법이 없는 것을 알고나니 함부로 push하지않아야함을 명심하게 되었다. 이것이 단순한 커밋 메세지 오타가 아니라 코드 오류였다면 서비스에 치명적일 수 있었기 때문이다.

출처
Git Docs
Github Changing a commit message