Md.*_*lam 6 git branch git-branch
现在我在功能分支中,但不管它是从开发分支还是发布分支创建的.
任何人都可以告诉我如何获得当前git分支的父分支名称.
小智 13
到目前为止,这对我有用。您可以将其用作 Mac 中的终端别名或 Windows 上的任何类型的快捷方式。
git log --pretty=format:'%D' HEAD^ | grep 'origin/' | head -n1 | sed 's@origin/@@' | sed 's@,.*@@'
Run Code Online (Sandbox Code Playgroud)
正如许多地方所解释的,它不是直接父级,它为您提供从当前分支创建的最近的分支或共享相同的 HEAD^
Tor*_*Ali 13
这个(来自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/[\^~].*//'
Run Code Online (Sandbox Code Playgroud)
小智 5
鉴于Git使用有向非循环图并且通常repo只有一个根,所有分支都指向一个初始提交.所以你真正想要的是与你的分支共享其历史最大部分的分支.
您不能只查找当前分支历史中包含HEAD的分支,因为此分支HEAD很可能已经移动了.
所以我建议你使用git merge-base,它找到两个分支或提交的最新共同祖先(又名叉点):
$ git merge-base feature develop
12345abc
$ git merge-base feature release
98765fed
Run Code Online (Sandbox Code Playgroud)
这将分别输出出现在两个分支的历史记录中的两个提交.其中一个将包含在两个分支中,因此您可以merge-base再次将它们提供给您想要的提交(或者更确切地说,您不想要的提交):
git merge-base 12345abc 98765fed
98765fed
Run Code Online (Sandbox Code Playgroud)
所以在我们的例子中,feature派生自develop,因为两者共享一个release没有的提交.
请注意,这只有在您不在功能和开发之间进行纵向交叉合并时才有效.