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
4

3 回答 3

2

首先,值得注意的是,您可能会将任何提交合并到当前提交中——事实上,它不必在任何分支上。

当您创建合并时,我相信第一个父级 ( HEAD^1) 始终是您在合并时所在的分支。因此,您可以查看HEAD^2(并且可能HEAD^3HEAD^4在章鱼合并的情况下)并测试它们是否在特定分支上。

要测试是否HEAD^2在分支上foo,您可以测试是否git merge-base HEAD^2 foo与 相同git rev-parse --verify HEAD^2

于 2011-08-31T19:45:49.613 回答
1

你可以在你的钩子中使用 $GIT_REFLOG_ACTION 。它包含诸如merge some_branch_name 或pull origin some_branch_name 之类的文本。

于 2015-06-09T14:19:44.050 回答
0

好吧,您可以使用git branch --contains <commit>列出所有分支;不确定是否完全满足您的要求,因为它会列出包含该提交的所有分支,但假设您正在合并一个新的提交,它可能会成功......

于 2011-08-31T20:33:07.483 回答