如何在不更改提交消息的情况下修改提交(重用上一个)?


656

有没有一种方法可以修改提交,而不会弹出vi(或您的$EDITOR)带有修改您的提交消息的选项,而只是重用上一条消息?


5
在艰难地学习修改的弊端之后,我会拒绝我自己的问题。
Sridhar Sarnobat 2014年

28
只要您遵守某些规则(例如不修改已经推送的内容),就没有理由修改必定是一件坏事。
paullb 2014年

3
修改提交不应用于在单个逻辑更改期间间歇性地提交工作。对于您应在本地正确提交,然后压扁的提交历史一次完成(@斯里达尔-Sarnobat)
DBCerigo

3
我完全同意@DBCerigo。我发现修改有用的唯一情况是,当我忘记在先前的提交中暂存文件时(例如,由于它是新文件,因此在运行git commit -a时不会自动暂存),并想追溯提交。
Sridhar Sarnobat,

1
即使您意识到更改历史记录的危险,如果您对最近的提交消息不满意,并且希望对其重新编写单词而不必重新设置基础,那么进行另一次时间更改很有用。
Sridhar Sarnobat,

Answers:


1009

从git 1.7.9版本开始,您还可以使用它git commit --amend --no-edit来获得结果。

请注意,这将不包括来自其他提交的元数据,例如时间戳,对您而言可能并不重要。


42
您还可以通过添加别名使默认设置为--no-edit更容易:“ amend = commit -a --amend --no-edit”
Jherico 2013年

1
@Jherico我建议删除-a。请执行原子提交,这样可以更轻松地查看或
重新设置基准

120

git commit -C HEAD --amend会做你想要的。该-C选项从另一个提交获取元数据。


15
只是为了增加Andy的答案。如果您经常这样做,则可以使用为其设置别名git config --global alias.amend 'commit --amend -C HEAD'。然后,您可以将其git amend用作快捷方式。
mikej 2012年

9
来吧,别偷懒,升级git并使用Shaggle建议的内置命令!但是为-C选项加了一个。
Dimitris Baltas 2012年

4
不仅是时间戳,还包括作者信息!
user1338062 2015年

3
@RyanCastner确实,您所指的评论来自2013年。使用我当前正在运行的git版本--amend,即使没有任何其他选项,它也保留了作者日期(但更改了提交日期)。因此,我删除了我的旧评论。
Ruben Verborgh '17

2
实际上,即使该答案不是公认的答案,它也具有不同的价值。与其他答案不同,您不必使用—amend。您可以创建一个新的提交,但使用与上一个提交相同的消息。这听起来可能没什么用,但是默认情况下,当我只保存我的工作而不必考虑一个不错的提交消息时,我的提交消息就会默认使用,我一直在重复使用该消息—message=“Work in progress (untested)”
Sridhar Sarnobat

67

另一种(愚蠢的)可能性是,git commit --amend <<< :wq如果您拥有vi(m)作为$EDITOR


39
即使对于本用例来说不是必需的,我也不知道您可以通过管道传输到vim。这带来了一些有趣的可能性。大提示。
Sridhar Sarnobat '16

6
... <<< ZZ可能打字得更少;)
Ruslan

6
..,甚至更少- ... <<< :x:)
skwisgaar's

3
我不认为这很愚蠢。这是改善打开vi的任何命令的工作流程的好方法。
B

12
三重尖括号。那是新的。
oligofren

16

要扩展接受的答案,您还可以执行以下操作:

git commit --amend --no-edit -a

添加当前更改的文件。


11

使用接受的答案来创建别名

 oops = "!f(){ \
    git add -A; \
    if [ \"$1\" == '' ]; then \
        git commit --amend --no-edit; \
    else \
        git commit --amend \"$@\"; \
    fi;\
}; f"

那你就可以

git oops

它将添加所有内容,并使用相同的消息进行修改

要么

git oops -m "new message"

修改替换消息

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.