Git: 在输入消息的过程中终止提交

我正忙着呢。我已经在 vim 中键入了我的提交消息。我现在想起来我需要改变一些事情。我意识到还有其他选项可以完成我想要的任务,但是我想知道是否有一种方法可以中止提交,但是仍然保存我到目前为止输入的提交消息。

65679 次浏览

是的。将提交消息写入另一个文件(:w /some/other/path.txt)。然后退出编辑器而不保存(:q!)。如果您以前将文件保存到其原始路径,请删除所有内容并首先写入空文件(空提交消息将中止提交)。

现在,当您准备提交“ for real”时,使用在备用路径中保存的消息文件。

或者,将提交消息复制到 vim 的一个缓冲区中。

值得注意的是,真的没必要这么做: commit --amend允许您在提交完成后更改提交,因此简单的解决方案是使用已有的内容生成提交,然后在推送之前修复它。您甚至可以在其破碎状态下完成提交,即 reset HEAD~(将您的工作副本重置为提交前的状态) ,修复您的工作副本,然后 commit -a -c HEAD@{1}使用旧的提交消息。

虽然您可以中止提交,但另一种方法是事后提交 修正。只需提交当前的工作,然后进行任何额外的更改,git add它们,然后运行 git commit --amend。您将被放回到提交消息编辑器中,当您保存时,提交将被修改为包含额外的更改和新的提交消息。

如果您打开了 vim 来写提交消息,只需删除那些没有以 #开头的行,git 就会中止您的提交

Aborting commit due to empty commit message.

如果您的编辑器可以使用错误代码退出—— Git 将终止提交

:cq

使用非零错误代码退出并中止提交。

@ bdonlan 的回答对这个问题很有帮助,但是我要指出一种情况,在这种情况下你可能需要一个更好的解决方案。

假设你想在最后一次提交中添加更改,那么你就按照@bdolan 的建议去做:

git add files
git commit --amend

假设在编写新消息期间,您后悔将这些文件添加到该提交。问题是你被困在一个 已经被拯救了提交消息和退出编辑器(有或没有保存)将添加这些更改的最后一次提交。回到这些动作之前的状态需要你进行 分割最后一次提交-我敢打赌你想要避免它。

诀窍是在编辑器只有以 #开头的行或根本没有行时保存和退出编辑器。当你离开时,你会收到这样的信息:

Aborting commit due to empty commit message.

而且你根本没有改变最后一次提交。

是的,有可能。为了进行提交,您的编辑器必须将提交消息写入文件 .git/COMMIT_EDITMSG,并以0状态码退出。

因此,如果您正在使用 VI/VIM,您可能需要执行以下操作..。

  1. 写入提交消息。
  2. :w保存提交消息(默认情况下,这会将当前内容保存到 .git/COMMIT_EDITMSG)
  3. 使用错误 :cq退出编辑器
  4. ... 做你必须做的... 甚至添加/删除文件到集结区。
  5. 继续使用 git commit -eF .git/COMMIT_MESSAGE编辑现有的提交消息

-F /path/to/file将使用/path/to/file 中的任何给定内容填充编辑器。但是,默认情况下,这将立即执行提交,除非您另外为 剪辑提供 -e标志。

我通常使用提供的终端在 IntelliJ中进行提交。不幸的是,我的提交是手动的:

git commit -m'my message' // etc

所以我认为唯一安全的做法就是 关闭终端窗口!,如果你想保存文本,只要突出显示它,然后复制,然后关闭终端窗口。

一个简单的方法就是放入一个空的提交消息(有或没有注释,因为它们不计数)。

将与所有文本编辑器一起工作。提交将失败- Aborting commit due to empty commit message.