退出Vim而不提交Git中的更改

时间:2013-05-16 19:31:53

标签: git vim git-commit

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

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

4 个答案:

答案 0 :(得分:52)

:cq!

这将强制向Vim发送错误,并且不会保存任何更改。 Link到Vim手册。

答案 1 :(得分:29)

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

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

答案 2 :(得分:17)

要让git在执行git commit --amendgit rebase -i时不做更改。

只需删除邮件(并保存)即可。所有git都会查找非空消息,以查看是否发生了有效的提交。由于存在提交消息(因为您之前提交了某些内容),因此git认为它是有效的提交或rebase。

答案 3 :(得分:1)

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来说这是可以的。对于这两种情况,如果编辑器给出的退出代码非零,那都是不对的。

exitcode是unix / linux中一个非常基本的概念,并且是一切正常(exitcode 0)或出现问题的便捷方法,用于通知调用方应用程序。