コミットした時刻を編集したい
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をまとめて現在時刻に変更することが可能。