git:在input消息中间中止提交

我正在提交。 我在vim中input了我的提交信息。 我现在记得我需要改变一些东西。 我意识到,还有其他的select来完成我想要的,但我想知道是否有一种方法来中止提交,但仍保存我迄今为止input的提交信息。

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

现在,当您准备好提交“reals”时,使用您在备用path中保存的消息文件。

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

值得一提的是,你根本不必这么做commit --amend可以让你在提交之后改变提交,所以简单的解决方法是用你已经得到的提交进行提交,然后在推送之前修复它。 你甚至可以完成提交到其中断状态, reset HEAD~ (重置你的工作副本在提交之前的状态),修复你的工作副本,然后commit -a -c HEAD@{1}以使用旧的提交消息。

如果你的编辑器可以退出一个错误代码 – Git将中止提交。 使用VIM时,input

 :cq 

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

如果你打开vim来写你的提交信息,只需删除不以开头的行,git将放弃提交

 Aborting commit due to empty commit message. 

虽然可以中止提交,但另一种方法是在之后修改提交。 简单地提交你当前的工作,然后做任何你想要的更改, git add它们,然后运行git commit --amend 。 你将被放回到提交消息编辑器中,当你保存时,提交将被修改,以包括额外的改变和新的提交信息。

是的,这是可能的。 为了提交,你的编辑器必须把提交信息写到文件.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标志来进行编辑

@bdonlan的回答对于这个问题是很好的,但是我会指出你可能想要一个更好的解决scheme。

假设你想添加对上次提交的更改。 所以你做@bdolanbuild议:

 git add files git commit --amend 

想象一下,在写新消息的时候,你后悔把这些文件添加到那个提交。 问题是你被一个已经保存的提交信息卡住,退出编辑器(有或没有保存)会将这些变化添加到最后一次提交。 恢复到这些操作之前的位置需要您分割最后的提交 – 我敢打赌,您希望避免它。

诀窍是保存并退出编辑器,而它只有以#开始的行或根本没有行。 当您退出时,您将收到以下信息:

 Aborting commit due to empty commit message. 

而且你还没有改变最后的提交。