【问题标题】:Exit Vim without committing changes in Git退出 Vim 而不在 Git 中提交更改
【发布时间】:2013-05-16 19:31:53
【问题描述】:

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

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

【问题讨论】:

  • 请注意,git reflog 是该工作副本的本地。这是你的 HEAD 的时间顺序历史,而不是逻辑历史。
  • git 在检测到临时文件已更改(已保存)时提交。这里更简单的问题是“如何在不保存的情况下退出 vim?”正如 gpojd 所示,答案是:q!
  • git 会替换之前的提交(哈希标签更改),即使我没有保存就退出。

标签: git vim git-commit


【解决方案1】:
:cq!

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

如果您希望 vim 在出现错误且不保存的情况下退出,您可能希望使用 cq 而不使用 !

【讨论】:

  • +++++++ 太棒了!
  • 你应该使用cq!它强制vim保存,而没有!它会关闭编辑器并显示错误而不保存。
【解决方案2】:

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

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

如果您希望 vim 在出现错误且不保存的情况下退出,您可能希望使用 cq 而不使用 !

【讨论】:

  • +1 表示:cq,但-1 表示:q! - 这是不正确的,它只是保留预先修改的提交消息并应用任何实际的分阶段更改。
  • @CharlesBailey 修正一下,你是对的,但是对于普通提交,空消息将阻止 Git 提交。我打算将我的第一句话作为实际答案的引导; gpjod 的回答中的讨论已经表明了它的问题。但是感谢您再次强调这一点!
  • 好的,但整个问题只是关于“修改”案例,所以我认为提及它有点误导;至少不要先说“如果你修改......”之类的话。
  • @CharlesBailey 感谢您纠缠我寻求更好的答案;我已经采纳了你的建议;希望我现在已经赢得了你的 +1 :-)
  • 这让我很困惑,通常的:q! 在这里不起作用,就像在正常提交的情况下一样!?因此,我只是修改了我的 repo,修改了我不知道的未提交的添加文件。
【解决方案3】:

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

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

【讨论】:

  • 我是\删除 cmets 还是只删除非注释部分?
  • @Shaanimal non cmets 就足够了。
【解决方案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)或出现问题,它也是通知调用者应用程序的简单方法。

【讨论】:

  • 你应该使用 cq! 它强制 vim 保存,而没有 ! 它会关闭编辑器并出现错误而不保存。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 2015-05-04
  • 2017-09-09
  • 1970-01-01
  • 2015-08-17
  • 2021-02-22
相关资源
最近更新 更多