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

Rap*_*ert 5 git

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

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

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

我正在使用 git 2.4.0。

har*_*ymc 8

在自定义合并驱动程序中,可以git symbolic-ref HEADGITHEAD_<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"
Run Code Online (Sandbox Code Playgroud)

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