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

Ale*_*ird 125 git

我正处于承诺的中间.我在vim中输入了我的提交消息.我现在想起我需要改变一些东西.我意识到还有其他选择可以实现我想要的,但我想知道是否有一种方法可以中止提交但仍保存到目前为止我输入的提交消息.

nim*_*odm 170

如果你的编辑器可以退出错误代码 - Git将中止提交.使用VIM时,请键入

:cq
Run Code Online (Sandbox Code Playgroud)

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

  • 这是一个很好的中止`commit --amend`的技巧,否则你必须删除现有的提交消息和`:wq`. (5认同)
  • 好戏!但问题是如何保存提交消息,而不是删除它. (2认同)

Bor*_*lid 82

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

现在,当您准备提交"for reals"时,请使用您在备用路径中保存的消息文件.

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

值得注意的是,你根本不需要这样做:commit --amend让你在完成后改变提交,所以简单的解决方案就是用你所拥有的东西生成提交,然后在推送之前修复它.您甚至可以在破坏状态下完成提交,reset HEAD~(将您重置为提交前工作副本所处的状态),修复工作副本,然后commit -a -c HEAD@{1}使用旧的提交消息.

  • 没工作...... :(它仍然完成了提交. (7认同)
  • 注意:使用":q!"退出vim 如果存在自动填充的合并冲突消息,则不会中止提交.相反,提交将继续,消息将不会列出哪些文件存在冲突. (5认同)
  • “写入空文件(空提交消息将中止提交)”部分非常有效,谢谢! (2认同)

小智 66

如果您打开vim来编写提交消息,只需删除不以#开头的行,git将中止您的提交

Aborting commit due to empty commit message.
Run Code Online (Sandbox Code Playgroud)

  • 当您想要中止git commit --amend时,这尤其有用. (10认同)
  • ggdG将剪切消息的所有内容,然后在下次运行vim时,可以对先前剪切的文本进行P运算。 (2认同)

bdo*_*lan 9

虽然您可以中止提交,但另一种方法是在之后修改提交.只需提交当前的工作,然后进行所需的任何其他更改git add,然后运行git commit --amend.您将被放回到提交消息编辑器中,当您保存时,将修改提交以包括其他更改和新的提交消息.


小智 6

是的,这是可能的.为了提交,您的编辑器必须将提交消息写入文件.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将填充与/路径/到/文件中的任何给定的内容编辑器.但是,默认情况下,这将立即执行提交,除非您-e另外提供标记以进行编辑.