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

64

当我使用git commit --amendgit rebase -i命令时,vim会打开让我进行修改。如果在不做任何更改的情况下退出vim,git reflog中仍然会显示一次提交。

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


请注意,git reflog 仅适用于该工作副本。它是您 HEAD 的时间顺序历史记录,而不是逻辑历史记录。 - Ben Jackson
2
当Git检测到临时文件已更改(已保存)时,会提交git提交。这里更简单的问题是“如何在不保存的情况下退出vim?”答案就像gpojd所展示的那样,是:q! - Jonathon Reinhart
即使我没有保存退出,git也会替换先前的提交(哈希标签会更改)。 - j0fb
4个回答

91
:cq!

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

如果您想使vim退出并且不保存,请使用cq而不带!


4
太棒了! - gauteh
你应该在使用 cq 命令时加上 !,这会强制 vim 进行保存操作。如果不加 !,则会在不保存的情况下关闭编辑器并出现错误。 - belka

32
当您没有进行更改并保存时,:q! 可以足够(在纯提交中;当您不是在修正时),但如果您像我一样,很有可能已经(甚至无意识地)保留了编辑后的信息。
Git(和其他使用Vim编辑消息的工具)将中止整个过程(并忽略消息中的任何已保存更改),如果编辑器以非成功状态退出。您可以使用:cq[uit]!命令在Vim中执行此操作。 如果您想让 vim 出现错误并且不保存,请使用没有cq

18
对于:cq加1分,但是:q!减1分——这并不正确,它只是保留了预修改的提交消息并应用所有实际暂存的更改。 - CB Bailey
1
@CharlesBailey 对于修改来说,你说得对,但是对于普通提交,空消息会阻止 Git 提交。我的第一句话是为了引出实际答案;gpjod 的回答中已经讨论了它的问题。但还是感谢你再次强调这点! - Ingo Karkat
1
好的,但整个问题只涉及“修改”情况,所以我认为提到它有点误导人。至少要先说一些像“如果你不是在修改…”这样的话。 - CB Bailey
@CharlesBailey 感谢您向更好的答案推进我;我已经采纳了您的建议;希望现在我赢得了您的 +1 :-) - Ingo Karkat
这让我感到困惑,通常的 :q! 在这里不起作用,就像普通提交的情况下一样!?因为这个原因,我弄乱了我的存储库,修改了我不知道的未提交添加的文件。 - macieksk

25
为了让git在执行 git commit --amendgit rebase -i 时不进行更改,只需删除消息(并保存)。Git所做的就是查找非空消息以查看是否发生了有效提交。由于有提交消息(因为您之前提交了一些内容),git认为这是有效的提交或rebase。

我应该同时删除注释和非注释部分,还是只删除非注释部分? - Shanimal
2
@Shanimal 不需要注释。 - FDinoff

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之间的区别在于,svn不喜欢空提交信息,如果您使用:q!退出(即使退出码为0),它也会停止。但是对于git来说这样做没问题。无论对于哪种版本控制方式,如果编辑器返回非零退出码,则不行。
退出码是Unix / Linux中一个非常基本的概念,也是通知调用应用程序一切是否正常(退出码0)或发生了错误的简单方法。

你应该在使用 cq 命令时加上 !,这会强制 vim 进行保存操作。如果不加 !,则会在关闭编辑器时出现错误并且不会保存。 - belka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接