日期在 Git 中的工作原理

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

Git 跟踪提交中的两个日期:作者日期和提交日期。 此外,Azure DevOps Services 和 Azure DevOps Server 还会跟踪提交首次推送到服务器的时间。

  • 创作日期:最初创作提交的时间。 通常,此日期为某人首次运行 git commit 的时间。
  • 提交日期:将提交应用到分支的时间。 很多情况下,它与创作日期相同。 如果提交是由作者以外的其他人作为补丁的一部分来修改、重定基本值或应用的,情况则可能会有所不同。 在这些情况下,日期为重定基本值或应用补丁的时间。
  • 推送日期:将提交推送到相关远程存储库的时间。 此日期特定于正在使用的远程版本控制系统,且在本地存储库中不可用。

运行 git log 时,默认会显示创作日期。 如果希望显示提交日期,则可使用多个命令行选项之一,例如 --pretty=fuller

让我们看一个简单的示例,看看这些概念在实践中的应用。 首先,创建一个普通提交:

git init
echo test > file.txt
git add *
git commit -m "A normal commit message"

现在,用其他消息修改该提交:

echo again > file.txt
git add *
git commit --amend -m "An amended commit"

如果检查常规日志历史记录,则会显示如下示例信息:

git log

commit 17232459f0ae25adeff21c9e21742ba22b7f3499
Date:   Thu Feb 25 19:38:54 2016 -0500

    An amended commit

现在,查看带创作日期的同一提交:

git log --pretty=fuller

commit 17232459f0ae25adeff21c9e21742ba22b7f3499
AuthorDate: Thu Feb 25 19:38:54 2016 -0500
Commit:     Ross Brodbeck <robrodbe@microsoft.com>
CommitDate: Thu Feb 25 19:39:36 2016 -0500

    An amended commit

请注意示例中创作日期与提交日期之间的细微差异。 创作日期为未经编辑的原始提交时间。 提交日期是指运行 --amend 命令的时间。

很多 git log 选项可帮助更好地了解日期。 例如,如果传递 --date 标记,则可确定日期的显示方式。 此标记对于规范化时区非常有用,因为 Git 默认以原始时区来显示日期。 它还可用于更改日期显示字符串。

要了解有关格式设置选项的详细信息,请参阅 git-log 手册页面

更改 Git 日期

准备提交代码时,可同时设置创作日期和提交日期。 但是,此功能不应经常使用。

可通过将 --date 标记传递给 git commit 来更改提交的创作日期。 各种文章讨论了此标记的格式设置,但没有妥善记录。 此 Stack Overflow 问题很好地解释了可接受的日期格式。

此外,还可使用环境变量 GIT_COMMITTER_DATEGIT_AUTHOR_DATE 来设置相应日期,如 git-commit 手册页面中所述。 如果需要采用此方法,请将此 Stack Overflow 问题用作起点。