Git修改/改写(不添加/更改文件)

ide*_*n42 4 git git-amend git-commit git-rewrite-history

通常我想编辑提交消息,而不必重新选择上次提交的文件集.

git commit file1.c file2.c
Run Code Online (Sandbox Code Playgroud)

提交消息中的意外错误.

git commit file1.c file2.c --amend
Run Code Online (Sandbox Code Playgroud)

这是有效的,但我不想重新选择原始提交中的文件集,我曾经偶然做过git commit -a --amend并无意中添加了许多更改.

我知道git rebase -i HEAD~1然后替换pickr(重新单词),但这最终只是几个步骤.

有没有办法在不包含任何新文件的情况下一步重写最后一次提交?

小智 7

修改消息而不进行分阶段更改

只要您的暂存区域没有进行任何更改,您就可以使用

git commit --amend
Run Code Online (Sandbox Code Playgroud)

编辑您之前提交的消息1.

修改消息,甚至上演的变化

但是,如果您确实进行了更改,那么您可以结合使用--only(或-o)标志--amend来仅编辑上一次提交的消息,而不提交暂存的更改:

git commit --amend --only
git commit --amend -o # Shorter
Run Code Online (Sandbox Code Playgroud)

David Ongaro在他的回答中指出了这一选择.

文档

git commit文件中所述(强调我的):

-o
--only  
Run Code Online (Sandbox Code Playgroud)

仅从命令行中指定的路径进行提交,忽略到目前为止已暂存的任何内容.如果在命令行上给出了任何路径,则这是git commit的默认操作模式,在这种情况下,可以省略此选项.如果此选项与--amend一起指定,则不需要指定任何路径,这可以用于修改最后一次提交而不提交已经暂存的更改.

1 正如Minitech和其他人所提到的那样.