【问题标题】:How do I stop a Git commit when VI is on the screen waiting for a commit message?当 VI 在屏幕上等待提交消息时,如何停止 Git 提交?
【发布时间】:2011-05-18 10:19:12
【问题描述】:

我已经让 Git 从 git bash 中执行提交,它像往常一样调出了 VI。

我现在想取消提交,如何防止从此时开始继续提交?

【问题讨论】:

  • 值得补充的是,您需要在输入:q!之前按Esc退出vim。

标签: git


【解决方案1】:

所有答案都想教你一点vim

但如果您在关闭 vim 时确实遇到问题

这个版本可能会有更多问题

在 git 中的每次交互都会重复这种情况

所以你想更换一个 git 编辑器

git config --global core.editor nano

git config --global core.editor <your_editor>

或学习 vim 或 emacs 等编辑器。

【讨论】:

    【解决方案2】:

    你有两个选择:

    • 提供空提交消息。如果它是一个新的提交并且你还没有保存消息,你可以简单地使用:q!(不保存就退出)。如果您已经保存(或者您正在修改之前的提交),只需删除整个日志消息并再次保存。这可以在 Vim 中使用 ggdG + :wq 来完成。

    • 让编辑器以非零退出代码退出。在 Vim 中,您可以使用 :cq(退出并显示错误代码)。

    值得注意的是,您始终可以使用git reset HEAD^ 将工作副本重置为提交前的状态。

    【讨论】:

    • :cq 是业务。出于某种原因,无论我是否使用 :q!,git 都会继续前进
    • git reset HEAD^ 会丢弃本地修改
    • :问!可能不起作用,因为那里已经有预定义的消息,您只是在编辑它。
    • 打嗝:如果git reset HEAD^ 要求更多,您的shell 可能会将^ 解释为行继续。请尝试 git reset "HEAD^"git reset HEAD^^git reset HEAD~1,而不是按照这个答案:stackoverflow.com/questions/14203952/git-reset-asks-more
    【解决方案3】:

    总结一下:

    • 创建新提交时(即git commit)使用:q! 退出。
    • 修改时(即git commit --amend)删除提交消息(仅前几行以#开头),例如按住v并使用箭头键选择它然后按 Delete。 退出:wq 以应用更改!如果您使用:q!,更改将丢失,并且将使用之前的提交消息。

    当使用 VIM 时,在这两种情况下都可以使用 :cq 退出 - VIM 将退出并显示错误代码并中止提交。

    【讨论】:

      【解决方案4】:
      • :q! 在修改提交时不起作用。它不更新 提交消息,但它执行修改:-(
      • :cq 完全中止修改。

      【讨论】:

      • 我希望我可以再添加一个 +1。当我的修正发现错误的提交时,我已经在这里很多次了。
      猜你喜欢
      • 2023-01-03
      • 2015-04-24
      • 2016-02-03
      • 2018-01-05
      • 2011-09-07
      • 2015-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多