如何获取当前分支的git父分支名称?

时间:2016-07-21 05:59:16

标签: git branch git-branch

现在我在一个功能分支中,但不管它是从开发分支还是发布分支创建的。

任何人都可以告诉我如何获得当前git分支的父分支名称。

3 个答案:

答案 0 :(得分:5)

鉴于Git使用有向非循环图并且通常只有一个repo,所有分支都指向一个初始提交。所以你真正想要的是与你的分支共享历史最大部分的分支。

你不能只查找当前分支历史中包含HEAD的分支,因为此分支HEAD很可能已经移动了。

所以我建议你使用git merge-base,它找到两个分支或提交的最新共同祖先(又名叉点):

$ git merge-base feature develop
12345abc
$ git merge-base feature release
98765fed

这将分别输出两个分支的历史记录中出现的两个提交。其中一个将包含在两个分支中,因此您可以再次将它们提供给merge-base以获得您想要的提交(或者更确切地说,不< / em>想要):

git merge-base 12345abc 98765fed
98765fed

因此,在我们的示例中,feature派生自develop,因为两者共享release没有的提交。

请注意,只有在功能和开发之间不进行纵向交叉合并时才会有效。

答案 1 :(得分:1)

此人(来自https://hankchizljaw.com/notes/24/)对我有用:

git show-branch -a | grep '\*' | grep -v `git rev-parse --abbrev-ref HEAD` | head -n1 | sed 's/.*\[\(.*\)\].*/\1/' | sed 's/[\^~].*//'

答案 2 :(得分:0)

到目前为止,这对我有用。您可以将其用作Mac中的终端别名或Windows中的任何类型的快捷方式。

git log --pretty=format:'%D' HEAD^ | grep 'origin/' | head -n1 | sed 's@origin/@@' | sed 's@,.*@@'

正如在许多地方所解释的,它不是直接父代,它为您提供了从当前分支创建或与之共享同一HEAD的最近分支。