ぷっぽプログラミング備忘録

linux, javascript, php, C#, そのうちScalaとかアプリ開発とかやってみたいです。

git のcommit時間を後から変更する

push前で、直前のコミットの時刻を現在時刻に変更する場合

シンプルです。

git commit --amend --reset-author

だいぶたってから変更する場合

前提

  • git rebaseをある程度理解していること
  • HEAD~3やHEAD~~といったHEADからの相対指定を理解していること
  • git push -f ... を行うという意味を理解していること

基本的には、

git commit --amend --date="Thu Feb 24 14:24:24 2022 +0900"

というコマンドを使えば思い通りの時間に変更できます。

1つ前ではなく、もっと前のコミットを変更したい場合などは、 git rebaseする必要があります。 → 直前のコミット以外のコミットを修正するので当然といえば当然ですね…

git rebase -i HEAD~【時刻を修正したいコミットの1個前を指定】
例)git rebase -i HEAD~3(HEADより2個前のコミットを修正したい場合*注意1*)

注意1 当然ご存知とは思いますが、HEAD~3とは、HEADの3つ前のコミットの意味です。

a1234bd(HEAD)
1x34p34(HEAD~)
w38gji5(HEAD~2)
i3252ty(HEAD~3)

といったコミット一覧だった場合、 w38gji5を変更したければ、git rebase -i i3252ty となります。つまり、git rebase -i HEAD~3 です。

あとは、時刻を変えたいコミット(git rebaseでeditに変更したコミット)のところで、 さきほどの

git commit --amend --date="Thu Feb 24 14:24:24 2022 +0900"

でdate指定をしては、git rebase --continueを行っていきます。
※この時点では、author日時のみが変更されています。commiter日時は変更されていないので中途半端な状態です。

最後に、

git rebase HEAD~【時刻を修正したいコミットが何個前かを指定】 --committer-date-is-author-date
例)git rebase HEAD~3 --committer-date-is-author-date(2個前のコミットを修正した場合)

--committer-date-is-author-dateで変更されているauthor日時でcommitter日時を上書きします。

※push後だった場合は、この一連の作業を行った後、禁忌のgit push -f ...を実行しないといけないのでご注意ください。 ※当然ですが、共有しているブランチでこういったことを行うと危険です。というかたぶんブーイングの嵐です。

参考

gitのコミット時間を変更する - Qiita