如何从Commit Message提取版本号写入文件并解决Git Amend报错
问题解决方法
报错原因
post-commit钩子运行在非交互式环境中,而git commit --amend默认会启动交互式编辑器修改提交信息,这种环境下编辑器无法正常初始化,因此抛出"编辑器出现问题"的错误。此外原脚本还缺少将version文件加入暂存区的步骤,导致修正提交时不会包含这个文件。
修正后的钩子脚本
# 防止循环触发:如果是amend触发的post-commit,直接退出 if [ -n "$SKIP_POST_COMMIT" ]; then exit 0 fi # 从提交信息中提取版本号写入version文件 grep -E "\[(\S+)\]" .git/COMMIT_EDITMSG > version # 将version文件添加到Git暂存区 git add version # 执行修正提交:复用原提交信息,跳过编辑器和钩子检测,同时设置环境变量避免循环 SKIP_POST_COMMIT=1 git commit --amend --no-verify --no-edit
关键修改点说明
- 添加
git add version:确保新生成的version文件被纳入修正后的提交中,否则amend不会包含该文件的变更。 - 使用
--no-edit参数:告诉Git直接复用原提交的信息,无需启动交互式编辑器,彻底解决非交互式环境下的编辑器报错问题。 - 循环防护逻辑:通过环境变量
SKIP_POST_COMMIT标记是否是amend触发的钩子执行,避免post-commit被无限循环调用(因为git commit --amend会再次触发post-commit钩子)。
内容的提问来源于stack exchange,提问作者jdenv
相关产品推荐
相关产品推荐

