Pet*_*ahn 5 git version-control merge github git-branch
如何找到进行提交的第一个分支?似乎能够做到这一点,但我不知道如何。
这似乎在 git 中是不可能的,因为它的设计将提交而不是分支放在更改跟踪的中心。
我可以使用以下显示第一个分支+任何合并但不能将焦点缩小到第一个提交分支的内容。
git branch --contains --merge <sha1>
Run Code Online (Sandbox Code Playgroud)
返回提交合并到的所有分支的列表以及它合并到的第一个分支。 --no-merged返回包含提交的所有后续分支,因为它们在合并点之后分支。
因此,您可以获得每个合并的列表,但不是第一个分支的列表,并且在命令执行之前删除的任何分支都将丢失(或者您正在查看 reflogs)
结果
git branch --contains <sha1 for "added feature/inital 1">
* develop
feature/inital
feature/subsequent1
git branch --contains <sha1 for "added feature/inital 1"> --merged
* develop
feature/inital
git branch --contains <sha1 for "added feature/inital 1"> --no-merged
feature/inital
Run Code Online (Sandbox Code Playgroud)
测试脚本
function mkbranch {
git checkout -b $1
git push --set-upstream origin $1
}
# Develop
mkbranch develop
for f in 1 2 3; do date > file${f}.txt; git add file${f}.txt; git commit -m "added develop $f"; done
git push
# Initial Feature Branch
mkbranch feature/inital
for f in 1 3; do date > file${f}.txt; git add file${f}.txt; git commit -m "modified feature/inital $f"; done
git push
# Merge
git checkout -b develop
git merge feature/inital
git push
# Next Feature Branch
mkbranch feature/subsequent1
for f in 1 3; do date > file${f}.txt; git add file${f}.txt; git commit -m "modified feature/subsequent1 $f"; done
git push
Run Code Online (Sandbox Code Playgroud)
答案很简单:你不能。
分支只是粘贴在提交上的便利贴。
您可以随时撕下便利贴并将其放在其他地方或扔掉。
因此您无法判断提交被引入的第一个分支是哪个。
更正确的是,只要
您可以找到答案,因为这样您就知道提交时分支将其发布在何处。