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

如何仅用Git实现:功能分支含指定内容时禁止合入master

需求实现方案

你的需求完全可以实现,仅通过Git自带的内置能力即可完成,不需要借助任何第三方脚本或工具。

核心实现原理

使用Git 2.24及以上版本自带的pre-merge-commit钩子,该钩子会在merge操作生成提交前触发,仅针对合并到master分支的场景做校验,不会影响功能分支的正常提交。

配置步骤

  • 进入本地仓库的钩子目录:.git/hooks
  • 将目录内的示例钩子文件pre-merge-commit.sample重命名为pre-merge-commit(删除.sample后缀即可)
  • 为钩子文件添加执行权限(Linux/macOS执行chmod +x pre-merge-commit,Windows环境无需额外操作)
  • 编辑pre-merge-commit文件,替换为以下内容:
#!/bin/sh
# 仅对合并到master分支的操作做校验
current_branch=$(git rev-parse --abbrev-ref HEAD)
if [ "$current_branch" != "master" ]; then
  exit 0
fi

# 检查待合并的内容中是否包含//TODO关键词,可自行添加其他需要拦截的规则
if git diff --cached | grep -q "//TODO"; then
  echo "错误:待合入master的内容包含未清理的//TODO注释,请清理后再执行合并"
  exit 1
fi

exit 0

适配性说明

  • 你使用的git merge --squash工作流完全适配该钩子:squash操作执行时会触发该钩子,校验的是squash后待提交到master的最终内容,不会拦截你在功能分支提交带TODO的代码
  • 所有校验逻辑使用的都是Git和系统自带的基础命令,无需安装任何第三方工具
  • 如果需要拦截其他指定内容,只需修改grep匹配的规则即可
  • 若你使用的Git版本低于2.24不支持pre-merge-commit钩子,也可以替换为Git自带的pre-commit钩子,逻辑和上述代码完全一致,仅在当前分支为master时校验提交内容,同样不会影响功能分支的正常提交

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 10:18:03