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

如何在commit-msg钩子中捕获Git提交信息?

解决commit-msg钩子无法捕获提交消息的问题

我来帮你搞定这个问题!你遇到的核心误区是对commit-msg钩子的参数理解错了——它的第一个参数不是提交消息字符串,而是Git用来暂存提交消息的临时文件路径(也就是你看到的.git/COMMIT_EDITMSG)。要拿到实际的提交消息,你需要读取这个文件的内容。

修改后的钩子脚本

把你的hooks/commit-msg脚本改成这样:

#!/bin/bash
# 第一个参数是存储提交消息的临时文件路径
commit_msg_file="$1"
# 读取文件内容到变量中
commit_msg=$(cat "$commit_msg_file")
echo "Your commit message: $commit_msg"

为什么这样能行?

当你执行git commit -m "fixed a bug"时,Git会先把这个消息写入临时文件.git/COMMIT_EDITMSG,然后把这个文件的路径传给commit-msg钩子。直接读取这个文件就能拿到完整的提交消息,不管是通过-m参数传入的,还是在编辑器里手动输入的内容都能捕获到。

你之前尝试的git log -1 HEAD方法确实不适用commit-msg钩子,因为这个钩子是在提交完成之前运行的,此时新的提交记录还没被写入Git仓库,自然查不到。而读取临时文件是Git官方推荐的、针对commit-msg钩子获取提交消息的标准方式。

内容的提问来源于stack exchange,提问作者maro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:15:38