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

Git提交注释修改全攻略:从amend到rebase的实用技巧 在版本控制系统(VCS)中,提交注释是记录代码变更意图的核心元数据,直接影响团队协作与项目维护效率。其原理在于Git采用不可变对象模型,每次提交都会生成唯一的哈希值,而修改注释实质是创建新对象并重写引用链。这项技术的工程价值在于提升代码历史可读性、便于问题追溯与自动化流程集成。在代码审查、持续集成和语义化版本发布等场景中,规范的注释尤为关键。本文聚焦Git的`git commit --amend`与`git rebase -i`两大工具,详解如何安全修正**最近一次提交**或**历史任意提交**的注释,涵盖 阅读详情

因为,有一天突然发现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 是不会这样的。

Mac开发环境重建:Terminal、Homebrew、zsh与Git深度协同指南 macOS系统中,终端(Terminal)是Unix哲学的运行入口,其核心由Shell解释器、PATH环境变量和配置文件三层构成;Homebrew作为包管理中枢,通过Formula脚本解决依赖地狱,支持Bottle二进制分发与Source源码编译双模式;zsh不仅提供命令补全,更可通过command_not_found_handler实现智能工具推荐;Git则需全局身份配置、SSH密钥集成及钩子自动化,才能真正融入日常开发流。这些组件并非孤立存在——它们共同构建起Mac开发者可预测、可回滚、可协作的命令行 阅读详情

相关推荐

Git不只是程序员的工具:普通人也能用它管理文档和备份

Git本质上是一种面向文本文件的分布式版本控制系统,其核心原理是通过差异存储、时间戳标记与本地完整历史记录,实现对任意文本内容(如Markdown、CSV、JSON等)的精准变更追踪与原子级回滚。相比网盘快照式备份,Git提供增量同步、空间高效、离线可用的技术价值,特别适合个人数字资产管理场景——包括办公文档防误删、多端笔记同步、家庭数据归档及NAS/U盘本地化备份。本文聚焦非开发者如何用git init/add/commit三个命令构建零依赖、高可靠、隐私可控的日常备份工作流。

天下无双 340

git commitmessage问题

1: 在执行git commit的时候,有两种办法为该commit添加message信息一种是git commit -m 'your message'另一种是git commit会打开commit-editmsg文件以供编辑message信息现在的问题是, 打开后(我设定在sublime中打开)在文件里写了相关信息并保存, 接下来怎么办呢?再执行一次git commit还是打开新的message文...

weixin_34253126的博客 739

Git worktree 实战指南:单仓库多分支并行开发

Git worktree 是 Git 原生支持的多工作区机制,它在不复制对象库的前提下,为同一仓库创建多个独立的工作目录,每个目录绑定不同分支,实现真正的分支并行开发。其核心原理是共享 `.git/objects` 与分离 `working directory`、`index` 和 `HEAD`,兼顾空间效率与操作原子性。相比 `git clone` 的冗余开销、submodule/subtree 的跨仓库复杂度,worktree 精准解决单仓库内多上下文协同痛点,显著降低 `git stash` 冲突、I

weixin_33782386的博客 560

git推送失败:gitee commit message valid fail

代码推送失败

q145356的博客 867

Git】关于“git remote: error: hook declined to update”报错的解决

通过idea进行git提交时,出现的报错仅通过idea中的git报错是无法准确判断具体原因的,只能知道提交被远程仓库拒绝了,但为什么拒绝并不显示 此时,需要在项目所在目录,打开Git Bash,进行手动操作 可以看到更加详细的报错信息,然后对症下药我看到的是 说明是提交时的commit信息问题,然后再排查信息涉及的内容 再询问其他老师,可以了解到,提交代码时,commit中写明的编号,应当已经建立开发卡片,并进入开发中状态,才可以进行提交另外还会有很多原因导致“0 描述”中的问题,需要根据具体的报错提示进行

RogerQianpeng的博客 8908

git踩坑系列 — git push时,报错 Commit validation failed for commit

开头一堆废话,可直接跳到文末 事情是这样发生的: 一直用vscode作为代码编辑器,终端也是用vscode自带的。 某个阴天的上午,我准备git push我的代码,push之前,我先pull了一下远程代码,不巧的是,有冲突。 于是,全神贯注的解决完冲突后,重新commit了一下,commit时,没有自己描述commit信息,而是用的vscode自动生成的Merge branch。。。。那一串描述文...

haoyanyu_的博客 1761

Git commit message和工作流规范

目的 统一团队Git commit日志标准,便于后续代码review,版本发布以及日志自动化生成等等。 统一团队的Git工作流,包括分支使用、tag规范、issue等 Git commit日志参考案例 angular commit-message-test-project babel-plugin-istanbul conventional-changelog 总体方案 Git...

banyan3646的博客 732

git 教程、常用命令

git 教程、常用命令

freeking101的博客 6549

Claude Code Mac开发全栈配置指南:Skill/Agent/Team三层实战

Claude Code并非普通AI编程助手,而是一套面向本地开发者的智能工作流引擎,其核心由Skill(可调用原子能力)、Agent(上下文感知决策调度)和Team(角色化协作范式)构成。在Mac平台,该架构深度依赖Node.js运行时、Shell环境一致性与系统权限模型,尤其对zsh、nvm、Gatekeeper及Keychain访问机制高度敏感。技术价值在于将开发者经验规则化、自动化,实现单人覆盖API安全审计、Next.js全栈检查、Electron打包验证等多角色任务。典型应用场景包括VS Code

chengli1824的博客 445

Git alias实战指南:命令简化、时间节省与团队规范

Git alias 是 Git 版本控制系统中用于命令简化的内置机制,其原理是通过配置文件定义快捷指令,由 Git 解析器原生执行,具备跨平台一致性、作用域隔离和低学习成本等技术优势。相比 shell 函数或 GUI 工具,alias 更安全、可移植且直面 Git 原始反馈,显著降低高频操作的认知负荷与按键次数。在日常开发、团队协作及 DevOps 流程中,它支撑分支切换、状态查看、提交同步、日志追溯等核心场景,并可演进为自动化工作流的‘胶水层’。本文聚焦 Git alias 的工程化落地,涵盖安全写法、故

weixin_34314962的博客 388

3.Linux基础开发⼯具【由浅入深-Linux】

在 Windows 环境中,我们习惯了双击 或 文件并一路点击“下一步”来安装软件。但在 Linux 的世界里,软件的分发和安装理念有着本质的不同。Linux 强调权限控制、模块化和依赖管理。为了帮您构建完整的 Linux 系统管理知识体系,我们可以将 Linux 下安装软件的方式归纳为五大主流阵营。这是 Linux 下最正统、也是日常使用频率最高的方式。它又细分为“在线仓库安装”和“本地包安装”两种场景。1. 在线仓库安装(如同手机自带的 App Store) 操作系统维护着一个庞大的软件云端仓库。通

插花弄玉的博客 434

实操型技术博客的内容设计方法论:故障树驱动与零配置复现

在软件工程实践中,‘能跑通’比‘讲明白’更关键——这催生了以真实故障为起点、以可复现为目标的技术内容范式。故障树(Fault Tree)将报错信息作为索引根节点,逐层展开原因与解法,契合工程师‘复制错误→搜索→秒级定位’的典型行为路径;而零配置复现则通过环境声明、依赖锁定、最小代码块和跨系统验证,消除因Python版本、Shell差异或编码设置导致的执行失败。这种设计不追求知识广度,而是聚焦Linux排障、Python办公自动化、Shell脚本等高频工作流中的断点,把经验转化为带时间戳截图、可粘贴命令和已验

clugcpne10995的博客 340

PyCharm安装三层次:JDK/Python配置、解释器绑定与功能激活

PyCharm并非传统意义上的单步安装软件,而是一个依赖Java运行时与Python解释器协同工作的集成开发环境(IDE)。其核心原理在于三层耦合:底层需匹配兼容的JDK版本(如21而非22)与Python解释器(如3.11更稳于3.12),中间层须正确绑定虚拟环境或Conda路径以避免权限与路径硬编码问题,上层则需激活UTF-8编码、终端Shell、代码格式化等关键功能。这种多层级环境协同机制,决定了它在数据科学、Web开发、教学实训等场景中必须经过系统性验证——尤其当出现‘Failed to load

clhq71932的博客 499

WebStorm前端开发深度配置指南:从安装避坑到工程级生产力闭环

WebStorm 不仅是代码编辑器,更是面向现代前端工程的语义化开发操作系统。其核心价值在于基于 PSI 引擎的静态分析能力与跨文件符号索引机制,显著提升 TypeScript、Tailwind CSS 等技术栈的智能补全、错误预判与重构安全性。相比 VS Code 的轻量插件模式,WebStorm 通过项目级语言服务管道、可审计的代码理解基础设施和深度 Git/ESLint/Prettier 集成,为中大型团队提供确定性开发体验。本文聚焦真实场景下的系统适配(Windows/macOS/Linux)、工程

weixin_34293246的博客 308

记录前端内网开发

记录前端内网开发 目录 正篇: 一、nvm 二、Node 三、npm 四、Git 五、VSCode 中篇: 一、package.json 1、catalog、workspace 2、npm i 报错 3、pnpm ⭐️ 3-1、pnpm 清理缓存命令 3-2、pnpm install 报错 3-3、pnpm run build 报错 二、pack-lock.json 三、Git 相关问题

Mr.小灰狼_随笔 458

移动端编程实战:Claude Code + 手机终端打造高效应急开发工作流

在软件工程实践中,远程开发与移动办公已成为提升开发效率的关键能力。其核心原理是通过SSH、云端IDE等技术,将计算密集型任务部署在远程服务器,本地终端仅负责交互,从而突破设备性能限制。这一架构的技术价值在于实现了开发环境的随身化和碎片化时间的高效利用,尤其适用于紧急Bug修复、代码审查等需要快速响应的场景。结合AI编程助手(如Claude Code)的智能补全与调试能力,开发者能在手机等移动设备上完成代码分析、逻辑修正等轻量级开发任务。本文以Claude Code与手机终端组合为例,详细解析了从工具选型(如

weixin_30920853的博客 550

programming.log:程序员的私有思维操作系统

在软件开发中,'技术笔记'和'认知留痕'是工程师构建可复用思维资产的基础能力。其本质并非知识存储,而是通过结构化记录实现思考过程的可追溯、可验证与可迭代——这背后涉及时间戳建模、领域标签设计、现象-推演-验证三层写作范式等工程化原理。该方法显著提升问题复现效率、团队经验沉淀质量及架构决策可信度,广泛应用于调试闭环、设计评审、故障复盘等真实研发场景。本文聚焦 programming.log 这一轻量级实践体系,揭示如何用纯文本+时间索引+原子化 Tag 构建属于开发者自己的‘第二大脑’。

世范水晶 487
上一篇: git的一些基本配置
veizz
博客等级 码龄17年 31粉丝 51原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值