场景

有时需要修改最近一次 commit 的提交时间,常见场景:

  • 修正因系统时间错误导致的时间偏差
  • 补交之前遗漏的 commit,希望记录实际编写时间
  • 整理提交历史时统一时间线

本文记录通过 git commit --amend 修改本地未推送 commit 的 Author Date 和 Committer Date 的方法。

命令

# NEW_DATE 为目标时间,格式:YYYY-MM-DD HH:MM:SS +时区
NEW_DATE="2026-07-01 10:33:02 +0800" && env GIT_AUTHOR_DATE="$NEW_DATE" GIT_COMMITTER_DATE="$NEW_DATE" git commit --amend --no-edit --date="$NEW_DATE"

参数说明

环境变量

GIT_AUTHOR_DATE
覆盖 Author Date(作者时间),即代码最初编写的时间
GIT_COMMITTER_DATE
覆盖 Committer Date(提交者时间),即代码实际被提交到仓库的时间
Author Date 和 Committer Date 在 git rebasegit cherry-pick 等场景下可能不同,一般情况两者保持一致即可。

git commit 选项

--amend
修改最近一次 commit,而不是创建新的 commit
--no-edit
不打开编辑器修改 commit message,保持原提交信息不变
--date
设置 commit 的日期,等同于设置 Committer Date

使用 env(而非 export)可确保环境变量仅对当前命令生效,不会污染当前 shell 会话。

简化版本

如果不需要修改 Author Date,可省略环境变量:

git commit --amend --no-edit --date="2026-07-01 10:33:02 +0800"

此命令仅修改 Committer Date,Author Date 保持不变。

查看 commit 时间

使用 --format=fuller 可同时查看 Author Date 和 Committer Date:

git log --format=fuller

输出示例:

commit abc123def456...
Author:     Your Name <your@email.com>
AuthorDate: Mon Jul 20 21:23:00 2026 +0800
Commit:     Your Name <your@email.com>
CommitDate: Mon Jul 20 21:23:00 2026 +0800

注意事项

--amend 会改变 commit hash,仅适用于本地尚未推送的 commit。

如果该 commit 已推送到远程,再次推送需要 --force,且会影响其他协作者,不建议对已推送的 commit 使用。

参考