修正 Vim(Mac) 有时无法正确提交 Git Commit Message 的问题

因为,有一天突然发现git提交的时候不能写log了,于是就发现了这个诡异的问题。还好万能的网友已经给出了解决办法。

git + vim + mac, 下才会出现这样的情况。


原贴在这里:http://www.phpvim.net/app/vim/fix-issue-there-was-a-problem-with-editor-vim.html



和 Subversion 一样,Git 也可以为 Commit Message 设置一个默认的编辑器,命令如下:

1
$ git config --global core.editor vim

不过我在 Mac OS X 系统使用 Git 的过程中,偶尔会遇到如下的情况:

1
2
3
4
5
6
7
*** Commands ***
  1: status	  2: update	  3: revert	  4: add untracked
  5: patch	  6: diff	  7: quit	  8: help
What now> q
Bye.
error: There was a problem with the editor 'vim'.
Please supply the message using either -m or -F option.

这种情况基本上都是出现在我打错字的时候,开始以为是输入法引起的 Vim 状态异常,不过出现的次数多了才慢慢发现一个规律——如果在 Vim 中编辑文本时因为按键失误出现类似这样:E492: Not an editor command… 的错误信息时,必然无法提交。

查了一下 ProGit 的文档后了解到:如果 Git 的 Commit Hooks 检测到脚本的返回非零状态码的话(Non-Zero Code,表示有错误发生),会阻止本次提交。到这里问题就比较清晰了,显然是 Vim 非正常退出返回了 Non-Zero Code。

为了验证猜测,我作了如下操作,打开终端 Vim,随便输入几个无效指令,造成 Exxx 之类的错误,然后立刻使用 :q 退出,观察返回値,结果:

1
2
3
verdana@phpvim:~ # vim
verdana@phpvim:~ # echo $?
1

:roll: 果然是这样呢!

后来在 Google Group: vim_mac 这个帖子中找到了解决的办法,就是使用完整的 Vim 路径—— /usr/bin/vim :

1
$ git config --global core.editor /usr/bin/vim

不太清楚 Mac OS X 中 Vim 为何会有这种问题,Bram 老大亲自现身作了解释:

Vim 在遇到 Exx Error 时返回 Non-Zero code 是为了兼容 Posix,不过这种情况应该只会出现在使用 Ex Mode 时,Normal/Insert Mode 是不会这样的。

<think>好的,我现在需要解决用户在Git提交时遇到的“commit message为空”的问题。用户提到在尝试提交时,异常终止后提示commit message为空,想知道如何解决。首先,我得回忆一下Git的相关操作,特别是commit流程中可能出错的地方。 首先,当用户执行`git commit`而没有使用`-m`选项时,Git会打开默认的文本编辑器(比如Vim或Nano)让用户输入提交信息。如果用户在编辑器中没有输入任何内容就直接关闭,或者编辑器没有正确保存提交信息,Git会检测到空的提交消息并拒绝提交,导致异常终止。这种情况下,用户需要重新打开编辑器输入有效的信息,或者使用其他方法提供提交信息。 接下来,我需要考虑用户可能的操作场景。用户可能是在命令行中直接输入`git commit`,然后进入编辑器界面,但由于不熟悉编辑器操作(比如不知道怎么保存退出Vim),导致提交信息为空。这时候,用户可能需要指导如何正确使用编辑器,或者改用`-m`选项直接添加消息。 另外,异常终止可能还会留下未完成的提交,比如一个未关闭的COMMIT_EDITMSG文件。这时候可能需要用户手动处理这个文件,或者使用`git commit --amend`来修正提交信息。 解决方案方面,首先应该建议用户使用`git commit -m "提交信息"`来避免进入编辑器。如果用户已经进入编辑器但不知道如何操作,需要指导如何保存退出。例如,在Vim中,按`i`进入插入模式,输入信息后按`Esc`,然后输入`:wq`保存并退出。如果用户已经遇到空消息的错误,可以引导他们重新运行`git commit`并正确输入消息。 此外,还可以介绍如何配置Git的默认编辑器,换成用户更熟悉的,比如VS Code,这样可能减少因编辑器不熟悉导致的问题。使用`git config --global core.editor "code --wait"`命令设置编辑器,并在提交时自动打开,用户可能更容易操作。 还有可能需要检查是否存在残留的提交消息文件,通常位于.git目录下的COMMIT_EDITMSG。如果该文件存在且为空,用户需要编辑它或删除后重新提交。 最后,总结几种解决方法,按步骤给出,确保用户能够根据具体情况选择合适的方式。同时,生成相关问题帮助用户进一步理解Git提交机制,比如如何修改上次提交信息,配置默认编辑器,或者处理提交中断的情况。</think>### 解决Git提交提示"commit message为空"的方法 当执行`git commit`命令未提供提交信息或编辑器异常退出时,Git会提示错误并终止提交。以下是具体解决步骤: --- #### **1. 直接通过命令行添加提交信息** 使用`-m`参数直接附加消息,**避免进入编辑器**: ```bash git commit -m "你的提交说明" ``` 此方法适用于快速提交,无需触发编辑器交互[^1]。 --- #### **2. 正确退出编辑器** 若已进入编辑器界面(如Vim): 1. **输入提交信息**:按`i`进入编辑模式,输入说明 2. **保存并退出**:按`Esc`后输入`:wq`(Vim)或对应编辑器的保存命令 --- #### **3. 处理残留的提交消息文件** 若因异常退出导致`.git/COMMIT_EDITMSG`文件为空: 1. 手动编辑该文件并保存有效内容 2. 重新执行提交命令: ```bash git commit ``` --- #### **4. 修改默认编辑器配置** 将编辑器设置为熟悉的工具(如VS Code): ```bash git config --global core.editor "code --wait" ``` 此后执行`git commit`会自动在VS Code中打开提交模板。 --- #### **5. 使用`--amend`修复最近提交** 若上次提交因空消息失败,可修正提交信息: ```bash git commit --amend -m "修正后的提交说明" ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值