修改时更新git commit author日期


305

我发现自己经常修改自己的承诺。我没有stash那么多,因为我倾向于忘记自己这样做的情况,尤其是当我想保存我离开之前或周末之前所做的事情时,所以我进行了“草稿”提交。唯一的事情是,当我修改提交时,它仍设置为原始作者日期。修改时是否有(简单)方法来更新它?


5
当您执行交互式变基并且期望GitHub以树顺序而不是日期顺序显示在“拉取请求”中的提交时,这特别有用。
Sukima

Answers:


368

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

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

-R用于date告诉它以RFC 2822格式输出日期的参数。这是可以理解git commit日期格式之一。)


27
FTR看起来像在OS X上一样,date不知道-Rdate无论如何,使用不带选项的选项确实可以完成工作
ksol 2012年

7
请注意,如果您希望以此作为别名,则需要添加a !并使其不使用引号,例如can = !git commit --amend --date=\"$(date -R)\"
Fabian Steeg 2012年

9
date -R在OSX上不起作用,请date +%s改用
隐藏

4
FreeBSD的同上:git commit --amend --date="$(date +%s)"
Dereckson 2014年

120
git commit --amend --date=now也可以。无需使用date(1)命令调用子外壳。您可以在git(1)的源代码中的date.c中看到它。c “ now”是一个特殊的值,可以使用date_now()函数进行转换。与“ noon”,“昨天”,“ midnight”,“ tea”和其他在结构数组special []中列出的相同。
sbz

267

另一种方法是

git commit --amend --reset-author

这确实会更改提交作者以及日期-但是,如果它最初是您未按下的提交,那么这是没有操作的。

--no-edit如果要更新多个提交的日期,但又希望保持提交消息不变,则也可以添加。这样,将不会提示您为每次提交编辑消息。


4
我想知道为什么这种行为不是默认行为,应该明确指定。这非常令人惊讶,并可能导致严重的后果。以我的理解,所做的git commit --amend 更改而不是仅仅进行调整或类似的操作,即,它导致存储库内容更改的历史不同,其中任何版本控制系统都非常严格。因此,我直观地期望作者和日期都与实际提交数据匹配。特别是作者身份很重要,甚至日期也很重要。如果您想击败负责此类默认设置的git开发人员,请对此评论投票。:)
Artem Pisarenko,

258

从Git v2.1.4开始(在Debian 8(Jessie)上测试)

git commit --amend --date=now

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

12

我喜欢Mark的答案并自己使用了几次,但是现在我在OS X上并且date -R不受支持。但是,一切都比让我们想到的原始答案容易得多,只需使用空字符串即可

git commit --date= --amend

6
那不行 Git因错误中止fatal: invalid date format:
Nikos C.

为我工作(在Windows,Git 1.9.4上)
Csq

1
最好--date="$(date)"在OS X中使用。该选项-R是GNUism。
鲁达莫拉

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.