git AuthorDateがCommitDateと異なるのはなぜですか?


102

私はgitログを検索し、AuthorDateとCommitDateが一部のコミットでわずかに異なることを確認します。

commit 3a5912f90dc5227f308e99f95152fbee2301c59a
Author:     <hidden>
AuthorDate: Fri Jun 15 10:57:22 2012 +0800
Commit:     <hidden>
CommitDate: Fri Jun 15 11:14:37 2012 +0800

著者とコミットは同じです。

これはどのように起こりますか?私は何日も困惑しています。

さらにあります(341のコミットのうち17で起こります):

+------------------------------+-------------------------------+
| from_unixtime(authored_date) | from_unixtime(committed_date) |
+------------------------------+-------------------------------+
| 2012-06-15 10:57:22          | 2012-06-15 11:14:37           |
| 2012-06-15 14:39:54          | 2012-06-15 14:48:57           |
| 2012-06-19 12:28:21          | 2012-06-19 12:29:41           |
| 2012-06-21 18:16:25          | 2012-06-21 18:28:48           |
| 2012-06-26 17:30:54          | 2012-06-26 17:33:55           |
| 2012-07-13 11:41:43          | 2012-07-13 11:42:17           |
| 2012-07-13 11:56:02          | 2012-07-13 12:13:22           |
| 2012-07-13 12:05:09          | 2012-07-13 12:12:24           |
| 2012-07-12 18:38:49          | 2012-07-13 12:26:35           |
| 2012-07-13 11:00:47          | 2012-07-13 12:25:15           |
| 2012-07-16 14:10:54          | 2012-07-16 14:15:01           |
| 2012-07-13 12:56:51          | 2012-07-16 13:49:48           |
| 2012-07-16 14:10:54          | 2012-07-16 14:19:46           |
| 2012-07-24 16:05:05          | 2012-07-24 16:05:48           |
| 2012-07-24 17:42:58          | 2012-07-24 17:43:33           |
| 2012-07-24 17:42:58          | 2012-07-24 17:45:18           |
| 2012-07-26 16:55:40          | 2012-07-26 16:55:53           |
+------------------------------+-------------------------------+

うーん、それはブランチをマージするときに起こっているようです。
魚モニター


これら2つの異なる日付を持つことによる1つの予期しない副作用:git logデフォルトでは、作成者のコミット日付のみが表示されます。しかし、あなたが使用している場合は--since--until--before--after、相対的な日付、Gitはコミッタではなく、日付をコミット使用しています!git log --since="yesterday"場合に予想される結果が表示されない場合があり著者は、日付が異なっているコミットコミッタ日付をコミットします。
SherylHohman

マージが日付を変更する可能性があるかどうかについては、コミットを変更するデフォルト以外の方法でマージが構成されているかどうかに依存する場合があります。たとえば、git --squash mergeは、構成可能な多少一般的なマージ戦略です(ここでは使用されていないように見えますが、例として挙げられています)。また、gitがIDEまたはgit GUIを介して使用されている場合、CLIに構成/機能が存在しない可能性があります。あなたのマージがあなたがマージを実行環境で実行するように設定されているものをダブルチェックする価値があるかもしれない。
ジョージPantazes

回答:


160

作成者の日付は、このコミットが最初に行われた日付(つまり、が終了した日付git commit)を示しています。のドキュメントによると、作成git commit者の日付は--dateスイッチを使用して上書きできます。

日付がコミットコミットブランチをリベースする際コミットとは、例えば、変更されるたびに変更されますが、別のブランチ(上にあるより)。

コミットを行い、別のリポジトリにパッチを適用するためにパッチを送信した場合も同じことが起こります。作成者の日付がの日付​​になりgit commit、コミットの日付は、パッチが適用された日付に設定されます他のレポ。

パッチを2人の同僚に送る場合、作成者の日付は1つですが、コミット日付は2つあります。

これはGit Bookでも言及されています

著者コミッターの違いは何か疑問に思われるかもしれません。著者は一方で、元々パッチを書いた人物であるコミッターが、最後のパッチを適用した人物です。したがって、プロジェクトにパッチを送信し、コアメンバーの1人がパッチを適用した場合、両方がクレジットを取得します—著者としてのあなたとコミッターとしてのコアメンバー


ブランチをマージするときに私のケースは起こりますか?
魚モニター

3
いいえ。日付はSHAの一部であると思います。そのため、リベースなど、履歴を書き換える操作を実行しない限り、日付は変更されません。
asmeurer 2012

2
チェリーピックの後、修正後、またはコミットの祖先のリベース後にタイムスタンプがどのように変化するかを簡単に説明していただければ幸いです。をいじってみるとgit show -s --format="commit %cD author %aD" HEAD、たとえば、コミットメッセージをgit gui両方の更新で修正するように見えgit commit --amendますが、コミッターの日付のみが更新されます。直感的ではありません。
init_js 2017

24

コミットの作成者の日付は、rebase / cherry-pickなどで保持されます。ただし、コミットの日付は変更されます。


問題のコミットのいくつかは、チェリーピッキングでもリベースでもありません。彼らは別のブランチをマージするように見えます。
魚モニター

7
そうgit commit --amendです。
asmeurer 2012
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.