54

当我使用git commit --amendorgit rebase -i时,vim 会打开让我进行更改。如果我改变主意并退出 vim 而不做任何更改,仍然会进行提交,它会显示在git reflog.

如何在不提交任何内容的情况下退出编辑器?

4

4 回答 4

79
:cq!

这将强制 Vim 出错,并且不会保存任何更改。链接到 Vim 手册。

如果您想退出并出现错误且不保存,您可能希望使用cqwithout 。!vim

于 2014-01-16T20:41:32.680 回答
31

当您没有进行更改并保存它们时,:q!就足够了(在简单的提交中;当您不修改时),但是如果您像我一样,很可能您已经(甚至是无意识地)保留了已编辑的消息。

如果编辑器以非成功退出状态退出,Git(和其他使用 Vim 编辑消息的此类工具)将中止整个过程(并忽略对消息的任何已保存更改)。您可以在 Vim 中使用该:cq[uit]!命令执行此操作。

如果您想退出并出现错误且不保存,您可能希望使用cqwithout 。!vim

于 2013-05-17T06:34:55.577 回答
25

让 git 在执行时不进行更改git commit --amendgit rebase -i.

只需删除消息(并保存)。git 所做的只是查找非空消息以查看是否发生了有效提交。由于有提交消息(因为您之前提交过某些内容),git 认为它是有效的提交或变基。

于 2013-05-16T20:30:40.610 回答
4

git 应用程序运行编辑器应用程序,如果编辑器应用程序返回不成功(非零退出代码),git 应用程序会识别到这一点并停止进一步处理。

在 vim 你可以用:cq!

来自 vim 手册:

                                                        :cq :cquit 
:cq[uit][!]             Quit Vim with an error code, so that the compiler
                        will not compile the same file again.
                        WARNING: All changes in files are lost!  Also when the
                        [!] is not used.  It works like ":qall!" :qall,
                        except that Vim returns a non-zero exit code.

这也适用于 svn!svn 和 git 之间的 AFAIK 区别在于,svn 不喜欢空提交消息,并且在您退出时停止:q!(即使退出代码为 0),但对于 git,这没关系。如果编辑器给出非零退出代码,这两者都不好。

exitcodes 是 unix/linux 中一个非常基本的概念,如果一切正常(exitcode 0)或出现问题,它也是通知调用者应用程序的简单方法。

于 2019-01-04T10:38:33.653 回答