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

如何用Git Hook按指定模板校验团队Commit提交信息?

实现Git Commit Message校验的pre-commit Hook

核心需求梳理

  • 强制commit message符合指定模板(类型限定为fix、feat、refactor、style、BREAKING CHANGE)
  • 若footer包含(template-ignore),跳过校验
  • 分支合并自动生成的commit message直接通过校验

Hook脚本实现

在项目的.git/hooks/目录下创建pre-commit文件(无后缀),写入以下脚本:

#!/bin/sh

# 获取当前commit message文件内容
COMMIT_MSG_FILE="$1"
COMMIT_MSG=$(cat "$COMMIT_MSG_FILE")

# 放行分支合并自动生成的提交信息
if echo "$COMMIT_MSG" | grep -qE '^Merge branch|^Merge pull request'; then
    exit 0
fi

# 若包含(template-ignore)标记,直接放行
if echo "$COMMIT_MSG" | grep -q '(template-ignore)'; then
    exit 0
fi

# 定义允许的commit类型
ALLOWED_TYPES="fix|feat|refactor|style|BREAKING CHANGE"

# 校验首行格式是否符合<type>: <description>
if ! echo "$COMMIT_MSG" | grep -qE "^($ALLOWED_TYPES): .+"; then
    echo "ERROR: Commit message不符合规范!"
    echo "首行必须遵循格式:<类型>: <描述>"
    echo "允许的类型包括:fix, feat, refactor, style, BREAKING CHANGE"
    echo "若需跳过校验,可在footer添加(template-ignore)"
    exit 1
fi

# 校验通过
exit 0

脚本配置说明

  1. 赋予执行权限:运行chmod +x .git/hooks/pre-commit让脚本可执行
  2. 全局模板配合:你已配置的全局commit模板git.exe config --global commit.template .git/.gitmessage可与该hook联动,自动带出模板格式,降低手动输入错误率
  3. 合并提交兼容:通过检测message开头的"Merge branch"或"Merge pull request"关键词,直接放行分支合并的自动提交信息
  4. 跳过校验机制:只要commit message的任意位置(footer)包含(template-ignore),就会跳过所有格式校验

测试验证

  • 合规提交:git commit -m "feat: 添加用户登录功能",hook正常放行
  • 不合规提交:git commit -m "添加登录",hook报错拦截
  • 分支合并:自动生成的合并message直接通过
  • 带跳过标记提交:`git commit -m "临时修复: 紧急修复线上bug

(template-ignore)"`,hook正常放行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 17:02:36