协慌网

登录 贡献 社区

如何更改 Git 中旧提交的时间戳?

如何修改现有未发布的提交的答案?描述一种修改尚未提交到上游的先前提交消息的方法。新消息继承了原始提交的时间戳。这似乎合乎逻辑,但是有没有办法重新设置时间呢?

答案

您可以进行交互式变基,并为要更改其日期的提交选择编辑。例如,当变基过程停止修改提交时,您输入:

git commit --amend --date="Wed Feb 16 14:00 2011 +0100"

之后,您继续进行交互式变基。

更新(响应 studgeek 的评论):更改提交日期而不是作者日期:

GIT_COMMITTER_DATE="Wed Feb 16 14:00 2011 +0100" git commit --amend

上面的几行设置了一个环境变量 GIT_COMMITTER_DATE,用于修改提交。

一切都在 Git Bash 中进行了测试。

git filter-branch与环境过滤器一起使用,该环境过滤器将GIT_AUTHOR_DATEGIT_COMMITTER_DATE为您要修复的提交的特定哈希值。

这将使该值和所有将来的哈希值无效。

例子:

如果您想更改119f9ecf58069b265ab22f1f97d2b648faf932e0的提交日期,则可以使用以下方法进行更改:

git filter-branch --env-filter \
    'if [ $GIT_COMMIT = 119f9ecf58069b265ab22f1f97d2b648faf932e0 ]
     then
         export GIT_AUTHOR_DATE="Fri Jan 2 21:38:53 2009 -0800"
         export GIT_COMMITTER_DATE="Sat May 19 01:01:01 2007 -0700"
     fi'

在一个命令中处理所有这些建议的更好方法是

LC_ALL=C GIT_COMMITTER_DATE="$(date)" git commit --amend --no-edit --date "$(date)"

这会将上次提交的提交和作者日期设置为 “现在”。