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

如何在Git的prepare-commit-msg钩子中获取父提交名称?

在Git prepare-commit-msg钩子中获取父提交列表

prepare-commit-msg钩子的传入参数里确实没有父提交信息,但可以通过Git命令直接获取不同场景下的父提交,以下是具体方法:

合并操作场景

如果钩子的第二个参数是merge(说明当前是合并提交),可以用这些命令获取父提交:

  • 获取所有父提交(包括章鱼合并的多个父):git rev-parse HEAD^@
  • 获取第一个父提交(当前分支的最后一次提交):git rev-parse HEAD^1
  • 获取第二个父提交(被合并分支的最后一次提交):git rev-parse HEAD^2

其他常见场景

  • 普通提交:只有一个父提交,用git rev-parse HEAD^或git rev-parse HEAD~1就能拿到
  • 修正提交(amend):可以通过钩子第三个参数的原提交SHA,用git rev-parse $COMMIT_SHA^获取原提交的父提交
  • 变基过程:变基时可以用git rev-parse ORIG_HEAD获取变基前的HEAD,结合上下文判断父提交

钩子脚本示例

比如写一个bash版的prepare-commit-msg钩子,自动把父提交信息追加到提交消息里:

#!/bin/bash
COMMIT_MSG_FILE="$1"
COMMIT_TYPE="$2"
COMMIT_SHA="$3"

case "$COMMIT_TYPE" in
    merge)
        PARENTS=$(git rev-parse HEAD^@)
        echo -e "\n合并父提交:$PARENTS" >> "$COMMIT_MSG_FILE"
        ;;
    commit)
        PARENT=$(git rev-parse HEAD^)
        echo -e "\n父提交:$PARENT" >> "$COMMIT_MSG_FILE"
        ;;
    amend)
        PARENT=$(git rev-parse "$COMMIT_SHA"^)
        echo -e "\n原提交父提交:$PARENT" >> "$COMMIT_MSG_FILE"
        ;;
esac

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 02:31:08