GitでAuthor DateとCommiter Dateを揃える
少し前に知人とGitの話題になり「コミット後のちょっとした修正でgit commit --amend
するけど、git log
しても日付って変わらないのね」と言われて、AuthorとCommitterの話をしました。
TL;DR
- GitにはAuthorとCommiterという概念があり、それぞれによる作業日付が記録されています。
git log --pretty=fuller
を実行すると、Author Date
とCommitter Date
が確認できます。Author Date
は--amend
で、Committer Date
はrebase
でオプションを併用すると書き換えられます。- ただし日付の書き換えは、リポジトリに関わる他のメンバーに影響がない範囲で行うようにしましょう。
--amendによるコミット記録の書き換えでは日付が変わらない?
コミットに対して追加修正を含める(=コミット自体を修正する)場合にcommit --amend
を行いますが、実行前後のログの日付を確認してみます。
変わらずどちらもMon Jun 10 18:50:32 2024 +0900
となっていますね。
なぜかというと、ここで表示されているのはAuthor
によって記録された日時だからです。
AuthorとCommitterとは?
Pro Gitの「2.3 Viewing the Commit History」には、Author
は作業を行った人、Committer
はその作業を適用した人と記載がされています。
You may be wondering what the difference is between author and committer. The author is the person who originally wrote the work, whereas the committer is the person who last applied the work. So, if you send in a patch to a project and one of the core members applies the patch, both of you get credit — you as the author, and the core member as the committer.
AuthorとCommitterの詳しい位置づけについては「5.1 Distributed Workflows」に記載されているので割愛しますが、ローカルリポジトリでは通常「作業を行った人=作業を適用した人」になるので、コミット直後はAuthorによる作業日時とCommitterによる作業日時は同じ日時を示します。
サブコマンドのlog
に--pretty=fuller
オプションを付けてコミットログを見てみます。
Authorの下のDateがAuthor Date
に変化して、その下にCommitとCommit Dateが追加されました。
AuthorDate
についてはMon Jun 10 18:50:32 2024 +0900
ですが、CommitDate
はMon Jun 10 18:55:16 2024 +0900
と時間がずれています。この時間がcommit --amend
をした時間になります。
ざっくりまとめると次のようになります。
AuthorDate
は基本はコミットが作成された日時が記録されるCommitDate
もAuthorDate
と同様になる- ただし
CommitDate
はそのコミットに対してcommit --amend
やrebase
などが行われると、Committerによりその作業を適用した日時で上書きされる
それぞれの日付を書き換える
例えばローカルで修正中に頻繁にcommit --amend
を繰り返してAuthorDate ≠ CommitDate
となった状態をAuthorDate = CommitDate
にしたいという場合も考えられます。
その場合はrebase
のオプションに--committer-date-is-author-date
を付与することで、CommitDateをAuthorDateに揃えることができます。
今回は初回コミットに対して操作するので--root
オプションでrebaseします。
AuthorDateとCommitDateがMon Jun 10 18:50:32 2024 +0900
で揃いました!
上記はCommitDateをAuthorDateに合わせましたが、逆にCommitDateに合わせたい場合は次のようにします。
またAuthorDateを書き換えることもできます。commit --amend --date="<日時>"
で可能です。
ただしこの時はもちろんCommitDateが更新されるので、必要に応じて--committer-date-is-author-date
で合わせましょう。
最後に
日付を改ざんすることはそうそうやるオペレーションではないですが、何らかの理由で揃えたい時はありそうです。そんな時に備えて、AuthorとCommiterという概念を覚えておくと便利かなと思います!