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

Husky commit-msg钩子正则表达式匹配失败问题求助

问题排查与解决方案

你的提交信息符合格式却被钩子拒绝,核心原因是提交信息字符串末尾带有换行符,而你的正则表达式没有考虑这种情况,导致匹配失败。

具体分析

Git生成的commit-msg文件末尾默认会带有换行符,你通过msg=$(cat $1 | sed '/^#.*/d')获取的内容会包含这个换行符。而正则中的.+无法匹配换行符(默认.不匹配换行),导致整个字符串无法满足正则的匹配条件。

此外,原正则中的Merge|Revert|Apply部分没有锚定行首行尾,可能会错误匹配包含这些词的其他提交信息(比如Merge feature branch),建议修正为精确匹配整行。

修复方案

你可以任选以下两种方案之一:

方案1:获取提交信息时去掉末尾换行符

修改钩子中的msg赋值行,添加去除换行的处理:

msg=$(cat "$1" | sed '/^#.*/d' | tr -d '\n')

这里用tr -d '\n'删除所有换行符,确保msg是纯提交文本内容。

方案2:修改正则表达式,兼容末尾空白字符

调整正则,允许末尾存在空白字符(包括换行),并精确匹配Merge/Revert/Apply:

PATTERN_COMMITS='(^IMO-[0-9]+\s#time\s([0-9]+([.][0-9]+)?[wdhm])([ ][0-9]+([.][0-9]+)?[wdhm])*\s\|\s[[:alnum:]_].+\s*$|^Merge$|^Revert$|^Apply$)'
  • \s*$:匹配末尾任意数量的空白字符(包括换行)
  • ^Merge$:精确匹配整行内容为Merge的提交,避免误匹配

另外,建议将cat $1改为cat "$1",避免文件名含空格时出现异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 16:02:54