我正在提交。我在vim中输入了我的提交消息。我现在想起我需要改变一些东西。我意识到还有其他选择可以实现我想要的,但我想知道是否有一种方法可以中止提交但仍保存到目前为止我输入的提交消息。
答案 0 :(得分:153)
如果您的编辑器可以使用错误代码退出 - Git将中止提交。使用VIM时,键入
:cq
以非零错误代码退出并中止提交。
答案 1 :(得分:78)
是。将提交消息写入另一个文件(:w /some/other/path.txt
)。然后退出编辑器而不保存(:q!
)。如果您之前将文件保存到其原始路径,请先删除所有内容并先写入空文件(空提交消息将中止提交)。
现在,当您准备提交"为实时"时,请使用您在备用路径中保存的消息文件。
或者,将提交消息复制到vim的一个缓冲区中。
值得注意的是,根本不必完全执行此操作:commit --amend
允许您在提交后更改提交,因此,简单的解决方案是使用您已获得的内容生成提交,然后在推送之前修复它。您甚至可以在其已损坏状态reset HEAD~
完成提交(将您重置为提交前工作副本所处的状态),修复您的工作副本,然后commit -a -c HEAD@{1}
以使用旧提交消息。
答案 2 :(得分:63)
如果您已打开vim来编写提交消息,只需删除不以#开头的行,git将中止您的提交
Aborting commit due to empty commit message.
答案 3 :(得分:9)
虽然您可以中止提交,但另一种方法是修改提交。只需提交当前的工作,然后进行所需的其他更改,git add
,然后运行git commit --amend
。您将被放回到提交消息编辑器中,当您保存时,将修改提交以包含其他更改和您的新提交消息。
答案 4 :(得分:5)
是的,这是可能的。为了提交,您的编辑器必须将提交消息写入文件.git/COMMIT_EDITMSG
并以0状态代码退出。
因此,如果您正在使用VI / VIM,则可能需要执行以下操作...
:w
保存提交消息(默认情况下,这会将当前内容保存到.git/COMMIT_EDITMSG
):cq
git commit -eF .git/COMMIT_MESSAGE
-F /path/to/file
将使用/ path / to / file中的任何给定内容填充编辑器。但是,默认情况下,这会立即执行提交,除非您为编辑另外提供-e
标记。
答案 5 :(得分:0)
我通常使用提供的终端在IntelliJ
中进行提交。不幸的是,我的提交是手动的:
git commit -m'my message' // etc
因此,我认为唯一可以做的就是关闭终端窗口!如果要保存,只需突出显示文本,然后复制,然后关闭终端窗口即可。
>答案 6 :(得分:-2)
假设您要将更改添加到上次提交。所以你按照@bdolan的建议做了:
git add files
git commit --amend
想象一下,在编写新消息时,您很遗憾将这些文件添加到该提交中。 问题您遇到已保存的提交消息,退出编辑器(有或没有保存)会将这些更改添加到上次提交。回到这些操作之前你所处的位置需要你split the last commit - 我打赌你想避免它。
诀窍是保存并退出编辑器,因为它只有以#
开头的行或根本没有行。当您退出时,您将看到以下消息:
Aborting commit due to empty commit message.
你还没有改变最后一次提交。