修改 Git 提交时更新作者日期

412

我经常修改我的提交记录,因为我不太使用stash命令,特别是当我在离开之前或周末之前想要保存我的工作时,我会忘记这么做,所以我会进行一次“草稿”提交。但问题是,当我修改提交记录后,它仍然设置为原始作者的时间。有没有(简单的)方法在修改提交记录时更新时间?


6
当您执行交互式变基并期望GitHub按树形顺序而非日期顺序显示拉取请求中的提交时,这尤其有用。 - Sukima
6个回答

459

您可以使用--date参数来更改git提交的作者日期。因此,如果您想修改最后一次提交,并将其作者日期更新为当前日期和时间,则可以执行以下操作:

git commit --amend --date="$(date -R)"

(date-R参数告诉它以RFC 2822格式输出日期。这是git commit理解的其中一种日期格式。)


32
在OS X上,date命令似乎不支持-R选项。不过,即使不带选项使用date命令也能完成任务。 - ksol
8
请注意,如果您希望将此作为别名使用,则需要添加一个 ! 并转义引号,例如:can = !git commit --amend --date=\"$(date -R)\" - Fabian Steeg
9
在OSX上,date -R无法使用,请改用date +%s - stash
4
同样适用于FreeBSD:git commit --amend --date="$(date +%s)" - Dereckson
175
git commit --amend --date=now 可以使用,不需要使用 date(1) 命令来调用子shell。你可以在 git(1) 的源代码 date.c 中查看。'now' 是一个特殊值,会使用 date_now() 函数来转换。同理,'noon', 'yesterday', 'midnight', 'tea' 等在 special[] 结构数组中列出的值也一样。 - sbz
显示剩余10条评论

428

截至Git v2.1.4(在Debian 8(Jessie)上测试过)

git commit --amend --date=now

52
如果您不想再次看到提交消息,请添加 --no-edit - Henrik N

317

另一种方法是

git commit --amend --reset-author

这会更改提交者和日期,但如果最初是您未推送的提交,则不会执行任何操作。

如果您想在多个提交上更新日期但保留提交消息不变,您还可以添加--no-edit选项。这样,您就不会被提示为每个提交编辑消息。


5
单次复制粘贴:git commit --amend --reset-author --no-edit翻译:这是一个Git命令,用于修改最近一次提交的作者信息,并保持提交消息不变。具体操作为在终端中输入指令 git commit --amend --reset-author --no-edit - AgentRev

24

我很喜欢Mark的回答,自己也用了好几次,但现在我在OS X上,date -R不支持。但其实比原来的答案想象的要简单得多,只需要使用空字符串

git commit --date= --amend

更新:

你也可以尝试

git commit --date="$(date)" --amend

或者在新版本的git中

git commit --date=now --amend

7
不行。Git 报错并中止,错误为“fatal: invalid date format:”。我会将其翻译为“无效日期格式”。 - Nikos C.
1
对我来说可行(在Windows上,Git 1.9.4) - Csq
1
在 OS X 中最好使用 --date="$(date)"。选项 -R 是 GNUism。 - Rudá Moura
我不知道是否应该觉得有趣,看到stackoverflow的答案越来越多地被“在我的Macintosh上不起作用”的评论所淹没。我的意思是,谁在乎呢? - Johan Boulé

4

如果有人仍在寻找一种简单的方法来更改多个提交的日期,我创建了这个npm软件包。

https://github.com/bitriddler/git-change-date

使用方法:

npm install -g git-change-date
cd [your-directory]
git-change-date

5
我很欣赏像这样自动化工作流程的做法。感谢您提供的 npm 包。@Urda,如果自动化可以改善工作流程,为什么要阻止人们使用这种解决方案呢? - Llama D'Attore

2
一个提交上有两个日期。
作者日期记录了提交最初的时间;可以使用--date命令行参数来指定。
提交日期在每次修改提交时都会更新;可以使用GIT_COMMITTER_DATE环境变量来指定。
要同时更改它们,可以这样做:
GIT_COMMITTER_DATE="$(date)" git commit --amend --no-edit --date "$(date)"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接