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

如何在pre-merge-commit钩子中获取MERGE_HEAD哈希值?

在pre-merge-commit钩子中获取合并头哈希的方法

方法一:直接读取MERGE_HEAD(推荐)

pre-merge-commit钩子本应在合并提交创建前触发,此时.git/MERGE_HEAD文件尚未被删除,你可以直接通过Git命令读取合并头哈希:

merge_head=$(git rev-parse MERGE_HEAD)

如果该命令执行失败,可能是Git版本过低(建议升级到2.24及以上版本),或者你的合并流程中MERGE_HEAD被提前清理,可尝试以下替代方法。

方法二:从MERGE_MSG文件提取信息

Git在合并过程中会将合并描述写入.git/MERGE_MSG文件,你可以从中提取合并目标的分支名或提交哈希,再转换为完整哈希:

# 读取MERGE_MSG内容
merge_msg=$(cat .git/MERGE_MSG)

# 匹配合并分支的场景(如 "Merge branch 'feature' into main")
if [[ $merge_msg =~ Merge branch \'([^\']+)\' ]]; then
    merge_head=$(git rev-parse "${BASH_REMATCH[1]}")
# 匹配合并单个提交的场景(如 "Merge commit 'a1b2c3d' into main")
elif [[ $merge_msg =~ Merge commit \'([0-9a-f]+)\' ]]; then
    merge_head="${BASH_REMATCH[1]}"
# 匹配合并标签的场景(如 "Merge tag 'v1.0' into main")
elif [[ $merge_msg =~ Merge tag \'([^\']+)\' ]]; then
    merge_head=$(git rev-parse "${BASH_REMATCH[1]}")
else
    echo "无法识别合并目标格式" >&2
    exit 1
fi

# 输出合并头哈希
echo "合并头哈希:$merge_head"

这种方法依赖MERGE_MSG的默认格式,在大多数标准合并场景下有效。

注意事项

  • pre-merge-commit仅在非快进合并时触发,快进合并不会执行该钩子,无需处理此类情况。
  • 确保钩子脚本拥有读取.git目录下文件的权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 02:45:31