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 문 제거하고 전체 적용 가능 )