首页/开发/Git 与协作速查/commit-msg 钩子接入提交校验
协作与代码评审75 条

commit-msg 钩子接入提交校验

在 .git/hooks/commit-msg(或 core.hooksPath 统一目录)里调用校验器,提交信息不合格时直接拒绝提交,把规范前移到本地。

Git 与协作速查开发更新于 2026-10-13

commit-msg 钩子是什么

commit-msg 是 Git 在生成提交信息之后、真正完成提交之前执行的钩子,传入的参数是保存提交信息的临时文件路径。把校验器接在这里,格式不合格的提交会直接被拒绝,规范就前移到了本地。钩子文件默认放在 .git/hooks 下,也可以用 core.hooksPath 统一指向项目内的目录,方便团队分发。注意钩子目录不受版本控制,需要额外的分发方案。

基本信息

钩子位置.git/hooks/commit-msg,或 core.hooksPath 指定目录
传入参数保存提交信息的临时文件路径
执行时机git commit 生成信息之后、提交完成之前
拒绝方式脚本以非零状态退出即可阻断提交
平台需要可执行权限,跨平台需注意换行符

典型使用场景

  • 团队统一提交格式,本地即时拦截不合规信息
  • 校验提交信息包含必需的关联单号
  • 检查标题长度与类型前缀是否符合约定
  • 用统一目录管理多个项目的钩子脚本
  • 新成员环境里通过钩子得到即时格式提示
  • 排查提交被拒的原因,确认是校验还是其他钩子

钩子示例

钩子示例
#!/bin/sh
npx --no-install commitlint --edit "$1"   # 校验提交信息文件
# 保存为 .git/hooks/commit-msg 并确保可执行
# chmod +x .git/hooks/commit-msg

统一钩子目录

统一钩子目录
git config core.hooksPath .githooks    # 指向项目内目录
git add .githooks/commit-msg            # 钩子脚本入库便于分发
chmod +x .githooks/commit-msg

常用钩子对照

钩子时机
pre-commit提交前,检查暂存内容
commit-msg提交信息生成后,校验信息格式
pre-push推送前,运行测试或检查
钩子不随克隆分发,需要每台机器安装或由工具框架统一管理;文件必须可执行,否则会静默不生效。

接入顺序建议

  • 先把校验器跑通,确认单条提交能被正确判定
  • 再写最小钩子脚本,手动执行一次验证可运行
  • 最后用统一钩子目录入库,方便团队成员分发
  • CI 中补一层校验作为兜底,防止本地绕过

易错点

  • Windows 上钩子缺少可执行位或换行符不对会静默失败,先手动执行一次确认
  • 钩子文件在目录内不受版本控制,团队需要额外分发方案(如统一钩子目录入库)
  • 校验脚本报错会阻断提交,排查时先确认是校验失败还是脚本本身运行失败
  • 钩子在 CI 环境里通常不会执行,规范落地的最后一道应放在服务端或流水线
  • 用自定义校验替换默认钩子时忘记保留原脚本,会丢掉框架自带的其他检查

数据来源与参考

  • Git 官方文档:githooks(commit-msg)
  • Git 官方文档:git-config(core.hooksPath)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌