Gitコミットの編集時刻を修正する方法

コミットした時刻を編集したい

gitコミットのタイムスタンプを編集する方法を紹介します。
git commit --amend または、git rebase にオプション指定することで、これらが可能になります。

二つのタイムスタンプ

Gitのコミットオブジェクトには二つのタイムスタンプがあります。
確認したい場合、git log --format=fuller で確認する事ができます。

  • Author Date(作成日時)
    コミットが最初に作成された日時。git log の際に表示される時刻

  • Commit Date(コミット日時)
    コミットがリポジトリに保存された日時。
    最初はAuther Dateと同時刻になりますが、コミットを修正した場合や、git commit --amend コマンドを使用した場合、この日時が更新されます。Githubや、Gitlabで表示される時刻

Gitコミットを編集したり、rebaseした場合でも、Auther Dateは特に指定しない限り更新されることはありません。基本的にはCommit Dateのみが更新されます。

AutherDateを変更する方法

このAuther Dateを任意の時刻に修正する方法を二つ紹介します。

方法1. git commit --amend

git commit --amend に更に、--date オプションを使う事で、amend時にAuther Dateを指定することができます。

git commit --amend --no-edit --date="$(date -R)"

--date
override the author date used in the commit

--no-edit
do not edit the commit message before committing

date -R
Use RFC 2822 date and time output format. This is equivalent to using “%a, %d %b %Y %T %z” as output_fmt while LC_TIME is set to the “C” locale .

date -R は、RFC書式で日付を取得してくれる。

複数のコミットを編集したい場合は、git rebas -iで編集したいコミットをeditにしておいて、コミットごとに、git commit --amend--date指定すればOK。あとはgit rebase --continue で繰り返し。

方法2. git rebase

複数のコミットをまとめて、現在時刻にする場合は、rebaseに、--ignore-dateオプションを指定するのが早いです。

git rebase <NEWBASE> --ignore-date

--ignore-date
ignore author date and use current date

元々ある、Author Dateを無視して、現在時刻に変更してくれます。

まとめ

  • GItのコミットオブジェクトにはタイムスタンプが二つある(Auther Dateと、Commit Date)
  • Gitコミットを修正した場合、変更されるのは基本Commit Dateのみ。
  • git commit --amend --date=<NEWDATE> で、Author Dateも任意の時刻に変更することが可能。
  • git rebase <NEWBASE> --ignore-date で、Author Dateをまとめて現在時刻に変更することが可能。
タイトルとURLをコピーしました