You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何避免Git Bash中Vi在交互式变基改写提交时崩溃?

Git中Vi/Vim改写提交消息时崩溃的解决方法

问题背景

在Git Bash(GNU bash, version 5.2.15(1)-release (x86_64-pc-msys),路径C:\Program Files\Git\bin\bash.exe)及IntelliJ终端执行提交消息改写操作时,出现如下错误:

hint: Waiting for your editor to close the file... Vim: Error reading input, exiting...
Vim: preserving files...
Vim: Finished.
error: There was a problem with the editor 'vi'.
Please supply the message using either -m or -F option.

触发场景:

  1. 执行git rebase -i <hash2>准备改写<hash1>的提交消息,在Vi中按i进入插入模式,输入reword后用Ctrl+C切到命令模式,输入:wq退出。
  2. Git自动打开COMMIT_EDITMSG文件,输入新消息后再次按Ctrl+C时,Vi崩溃并抛出上述错误。

已尝试无效操作:

  • 全局配置core.editor为null、vi、vi -f、vim、vim -f
  • 可通过vi .git/COMMIT_EDITMSG恢复交换文件,但需根本解决,不愿用Notepad++替代Vi/Vim。

解决方案

1. 使用标准快捷键切换命令模式

Vi/Vim中切换到命令模式的标准按键是Esc,而非Ctrl+C。Ctrl+C会向进程发送中断信号,导致输入读取异常。修正操作步骤:

  • 编辑完成后按Esc回到命令模式
  • 输入:wq保存退出

2. 配置Vim为终端独占模式

通过全局Git配置让Vim以受限(终端独占)模式启动,避免交互冲突:

git config --global core.editor "vim -Z"

3. 重置终端输入配置

在Git Bash中执行以下命令,修复可能的键盘映射或终端输入异常:

stty sane

4. 直接修改最近提交(适用场景)

若<hash1>是最新提交,可跳过变基,直接执行:

git commit --amend

在Vim中编辑消息后,按Esc+:wq完成操作。

5. 强制Git等待编辑器进程结束

配置Git使用wait确保Vim完全关闭后再继续:

git config --global core.editor "bash -c 'vim \"\$@\"; wait'"

内容的提问来源于stack exchange,提问作者friend.code

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 02:45:18