在 prepare-commit-msg 钩子中找出合并的提交

在 prepare-commit-msg 钩子中找出合并的提交

我尝试创建一个prepare-commit-msg适用于合并提交的钩子。脚本传递了以下参数.git/MERGE_MSGmerge

我需要获取合并提交的哈希值或分支名称(对于普通的非 octopus 合并)。我知道我可以git rev-parse MERGE_HEAD获取哈希值或name-rev --name-only MERGE_HEAD获取分支名称(如果有)。

但是,似乎prepare-commit-msg在创建 MERGE_HEAD 之前就调用了。除了解析自动生成的消息之外,还有其他方法可以知道合并了哪个提交吗?

我正在使用 git 2.4.0。

答案1

在自定义合并驱动程序中,可以从环境变量中检索要合并到的分支的名称(目标),git symbolic-ref HEAD 以及要合并到的分支的名称(源) GITHEAD_<SHA>

这是一个示例脚本片段:

# retrieve merged branch name from an env var GITHEAD_<sha>=<branchName> 
# we cannot use a sym ref of MERGE_HEAD, as it doesn't yet exist 
gitHead=$(env | grep GITHEAD) # e.g. GITHEAD_<sha>=release/1.43 
# cut out everything up to the last "=" sign 
source="${gitHead##*=}"

# retrieve base branch name from a sym ref of HEAD 
branch=$(git symbolic-ref HEAD) # e.g. refs/heads/master 
# cut out "refs/heads"
destination="${branch#refs/heads/}"

echo "Merging from $source into $destination"

来源 :如何在自定义 Git 合并驱动程序中检索分支名称?

相关内容