Git合并后钩子,如何获取合并分支的名称

3

我正在尝试创建一个后置合并钩子脚本,它只在从特定分支合并时运行。如何确定更改来自于哪个分支的特定提交的名称?

例如:

if $from_specific_branch == 1 then 

git diff --name-status HEAD@{1} HEAD "some_folder" | 
   while read st file; do
      #skip deleted
      if [ "$st" == 'D' ]; then continue; fi

      # .. do something with those files
   end
3个回答

2
首先,值得注意的是,您可以将任何提交合并到当前提交中——实际上不必在任何分支上。
创建合并时,我相信第一个父提交(HEAD^1)始终是您合并时所在的分支。因此,您可以查看HEAD^2(在八爪鱼合并的情况下可能还有HEAD^3HEAD^4),并测试它们是否位于特定的分支中。
要测试HEAD^2 是否在分支foo 上,您可以测试git merge-base HEAD^2 foo 是否与git rev-parse --verify HEAD^2相同。

1

您可以在钩子中使用$GIT_REFLOG_ACTION。它包含类似于合并some_branch_name,或者拉取origin some_branch_name等文本。


0

你可以使用 git branch --contains <commit> 命令来列出所有的分支;不确定这是否完全符合你的要求,因为它会列出包含该提交的任何分支,但是假设你正在合并一个新的提交,它可能会起到作用...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接