我尝试创建一个prepare-commit-msg
适用于合并提交的钩子。脚本传递了以下参数.git/MERGE_MSG
:merge
我需要获取合并提交的哈希值或分支名称(对于普通的非 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"