为什么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           |
+------------------------------+-------------------------------+

嗯,合并分支时似乎正在发生。
Fish Monitor


具有这两个不同日期的一个意外的副作用:git log默认情况下,仅显示作者提交日期。但是如果你使用--since--until--before--after,相对日期,Git使用的提交者提交日期,而不是!git log --since="yesterday"可能不会显示预期的结果,如果作者提交日期是从不同的提交者提交日期。
SherylHohman

关于合并是否会更改日期,可能取决于是否以某种非默认方式配置合并来修改提交。例如,git --squash merge是一种可以配置的较为常见的合并策略(尽管它看起来不像在这里使用,但出于示例目的而提出)。另外,如果通过IDE或git GUI使用git,则CLI中可能没有配置/功能。这可能是值得仔细检查你的合并配置环境中做你在执行合并。
乔治Pantazes

Answers:


160

作者日期笔记时,这个原本承诺作出(即当你完成了git commit)。根据的文档git commit,可以使用--date开关覆盖作者日期。

提交日期得到改变每个被修饰,例如提交衍合分支,其中所述提交是在另一个分支(当时间更多)。

如果您进行提交并将修补程序发送给另一个修补程序以将其应用到另一个仓库中,则可能会发生同样的情况:作者日期将是您的日期git commit,提交日期将设置为在其中应用修补程序的日期。其他回购。

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

Git书中也提到了这一点:

您可能想知道authorcommitter有什么区别。的作者是谁最初写补丁的人,而提交者是谁最后应用补丁的人。因此,如果您向项目发送补丁程序,并且其中一个核心成员应用了该补丁程序,那么你们俩都将获得荣誉-您作为作者,而核心成员作为提交者


合并分支机构时会发生我的情况吗?
Fish Monitor

3
不会。我认为日期是SHA的一部分,因此,除非您执行一些重写历史记录的操作(如重新定基),否则它就不会更改。
asmeurer,2012年

2
简短地描述一下我们应该期望在樱桃签之后,修改或重新定购提交的祖先之后如何更改时间戳记的做法。与一起玩git show -s --format="commit %cD author %aD" HEAD,例如,似乎修改了提交消息并同时git gui更新了两者,但git commit --amend仅更新了提交者日期。不直观。
init_js

24

提交的作者日期保留在rebase / cherry-pick等上。但是提交日期已更改。


一些有问题的提交既不是采摘也不是变基。它们看起来像合并另一个分支。
Fish Monitor

7
也是git commit --amend
asmeurer
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.