[git] 커밋메시지 수정하는 방법

선정·2023년 3월 4일
0

1. remote branch로 push 하기 이전

(1) 가장 최근 commit한 messgae 수정

git commit --amend

터미널에 git commit --amend 를 입력하면 가장 최근 커밋한 메시지를 수정할 수 있다. 메시지를 변경하고 저장하면 끝. git log 를 통해 변경된 내역을 확인할 수 있다.

(2) 더 이전의 commit message 수정

git log 로 커밋 기록을 확인하고, 수정하고 싶은 커밋 메시지가 가장 최근 커밋에서 몇 번째인지 확인한다.

수정하고 싶은 커밋 메시지가 153. 장바구니 리듀서 추가 라면, 위(가장 최근 커밋)에서 4번째 이므로 아래와 같이 명령어를 터미널에 입력한다.

git rebase -i HEAD~4

그럼 터미널에 최신 4개의 커밋을 확인하고 수정할 수 있다. 수정하고 싶은 커밋 메시지의 앞에 있는 pick 명령어를 reword 로 수정하고 저장하면 커밋 메시지를 수정할 수 있는 또다른 창이 띄워진다. 같은 방법으로 여러 개의 커밋 메시지를 한꺼번에 수정 할 수도 있다. 그곳에서 메시지를 수정하고 저장하면 끝. 마찬가지로 git log 를 통해 변경된 내역을 확인할 수 있다.

2. remote branch로 push 한 이후

커밋 메시지를 수정하는 방법 자체는 위와 동일하다. 경우에 따라 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를 할 경우, 원격 저장소에 커밋들이 유실될 수 있다. 특히 팀 단위로 프로젝트를 하는 등 remote branch를 다른 사람들과 공유하고 있다면 상황이 번거로워질 것이라고 한다. 수정하기 전 커밋을 pull 받은 사람들의 작업이 local branch와의 동기화가 끊어지게 되기 때문이다.

그러니까 가능한 강제로 push 하는 상황이 발생하지 않도록 push 전에는 제대로 확인을 해야하고 특히나 remote branch를 공유하고 있다면 더더욱 주의해야 함!!!

profile
starter

0개의 댓글