创建 pre-merge-commit 钩子
导航到 Git 仓库的钩子目录:
cd /path/to/your/repo/.git/hooks
创建或编辑 pre-merge-commit 钩子:
也可以通过指令创建
nano pre-merge-commit
在钩子文件中添加以下代码:
#!/bin/sh
# 获取当前分支名称
current_branch=$(git symbolic-ref --short HEAD)
# 获取即将合并的分支名称
merging_branch=$(git rev-parse --abbrev-ref MERGE_HEAD)
# 检查是否正在尝试将 dev 分支合并到其他分支
if [ "$merging_branch" = "dev" ]; then
echo "Error: Merging the 'dev' branch into any other branch is not allowed."
exit 1
fi
# 允许合并继续
exit 0
使钩子脚本可执行:
chmod +x pre-merge-commit
测试 pre-merge-commit 钩子
尝试将 dev 分支合并到其他分支:
git checkout other-branch
git merge dev
预期结果:合并操作会被中止,并显示错误信息:
Error: Merging the 'dev' branch into any other branch is not allowed.
尝试将其他分支合并到当前分支:
git merge feature-branch
预期结果:合并操作应该成功进行。
补充说明
上述 pre-merge-commit 钩子只在生成合并提交前运行,因此如果 dev 分支的合并是快速合并(fast-forward merge),钩子不会被触发。为确保所有合并操作都被检查,可以同时创建 pre-merge 钩子来处理快速合并的情况:和上面操作一样,不过是从pre-merge-commit换成了pre-merge钩子