git commit 내용 수정하는 법

git commit 내용 수정하기

git log로 커밋 기록을 확인하면

commit 커밋해시번호
Author : 커밋한 사람 정보
Date : 커밋 날짜
    커밋 내용

과 같은 내용의 리스트들이 쭉 나온다.
우리가 필요한 것은 내가 수정하고자 하는 커밋보다 하나 전 커밋이다.

git rebase -i 하나 전 커밋의 커밋 해시번호
( 혹은 git rebase -i 하나 전 커밋의 해시번호 앞 8자리) 를 입력한다.
( intelliJ를 IDE로 사용하고 있는 경우, 하단 Version Control > Log > 이전 커밋 클릭 > 우측 하단에 고유번호 확인 가능 )

vi 창이 나타나면서 내가 수정하고 싶은 커밋부터 마지막 커밋까지 쭉 리스트들이 나온다. 수정하고자 하는 커밋들만 골라서 pick 대신 edit 를 적어준다.

git commit --amend 를 적어주고 수정하려 하는 커밋 내역을 수정한다.

저장 후 git rebase --continue 로 커밋 변경을 종료한다. ( edit을 여러개 한 경우 git rebase --continue를 여러번 쳐야 함. )

git commit 날짜 수정하기

vi 창에서 edit 으로 변경 한 이 후
git commit --amend --no-edit --date "Jan 04 21:00:00 2020 +0900" 와 같은 형식으로 원하는 날짜를 적어 준다. git rebase --continue 로 커밋 변경을 종료한다.

git commit user 정보 수정하기

vi 창에서 edit 으로 변경 한 이 후 git commit --amend --no-edit --author="이름 <이메일>" 와 같은 형식으로 원하는 날짜를 적어 준다. git rebase --continue 로 커밋 변경을 종료한다.

이미 푸시한 commit 내역 수정하기

rebase가 종료된 이 후에 git push 원격저장소이름 +브렌치이름으로 force push 한다.
( 예를 들어 git push origin +develop ) merge, push 모두 한 경우에는 merge 한 브런치 역시 똑같이 rebase 해서 push 해 줘야 한다. 원격 저장소에 해당 브렌치가 protected 상태이면 force push가 불가하다.

committer 변경까지 하고 싶을 때

git commit에는 author와 committer가 있는데, github에서 잔디에 보이기 위해서는 author만 변경하면 된다.
하지만 정보를 자세히 보면 committer에 대한 내용이 숨겨져 있는데, 이것을 수정하기 위해서는 git filter-branch를 사용해야 한다.

git filter-branch --commit-filter '
        if [ "$GIT_COMMITTER_NAME" = "<Old Name>" ];
        then
                GIT_COMMITTER_NAME="<New Committer Name>";
                GIT_COMMITTER_EMAIL="<New Committer Email>";

                GIT_AUTHOR_NAME="<New Author Name>";
                GIT_AUTHOR_EMAIL="<New Author Email>";
                git commit-tree "$@";
        else
                git commit-tree "$@";
        fi' HEAD

if문에 있는 [ "$GIT_COMMITTER_NAME" = "<Old Name>" ][ "$GIT_COMMITTER_EMAIL" = "<Old Email>" ] 등으로 변경해서 사용할 수 있다.
( if 문 제거하고 전체 적용 가능 )