为什么 gitAuthorDate 与 Committee Date 不同?

我查看了我的 git 日志,发现 AuthorDate 和 Committee Date 对于我的一些提交来说略有不同。从 git log --pretty=fuller输出:

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           |
+------------------------------+-------------------------------+
47234 次浏览

提交的作者日期保留在 rebase/cherry-pick 等,但提交日期发生了变化。

作者日期记录了最初提交的时间(即完成 git commit的时间)。根据 git commit的文档,使用 --date开关可以覆盖作者日期。

每次修改提交时,提交日期都会发生变化,例如,当在另一个分支(更多)上重新定位提交所在的分支时。

同样的情况也会发生,如果你提交并发送你的补丁到另一个补丁,以便在另一个回购中应用补丁: 作者日期将是你的 git commit的日期,提交日期将被设置为该日期时,补丁被应用在另一个回购。

如果您将补丁发送给两个同事,那么将有一个作者日期,但是有两个不同的提交日期。

Git Book也提到了这一点:

您可能想知道 作者委员之间的区别是什么。作者是最初编写补丁的人,而 委员是最后应用补丁的人。因此,如果你向一个项目发送了一个补丁,其中一个核心成员应用了这个补丁,那么你们两个作为作者和作为提交者的核心成员都将获得荣誉

我碰巧遇到了 Github 显示与 git log不同的提交时间的情况,我认为这是 Github 的一个 bug。

原来 github 显示的是 CommitDate,而 git log显示的是 AuthorDate(没有 fuller标志)。

之所以会发生这种情况,是因为我从另一个分支挑选了两个提交。在初始化提交时间戳时会发生变化,就像执行 commit --append时一样。

在我的情况下,Gitrebase保留了提交日期。

还可以使用 --format=fuller 医生检查 git 日志中的 AuthorDate 和 CommitDate