查找进行 git 提交的第一个分支

Find first branch on which a git commit was made

如何找到第一个提交的分支?似乎可以做到这一点,但我不确定怎么做。

这似乎在 git 中是不可能的,因为它的设计将提交而不是分支放在更改跟踪的中心。

我可以使用以下显示 1st 分支 + 任何合并但不能将焦点缩小到仅 1st 提交分支。

git branch --contains --merge <sha1>

returns 合并提交的所有分支的列表以及合并的第一个分支。 --no-merged returns 所有包含提交的后续分支,因为它们在合并点之后分支。

因此,您可以获得每个合并的列表,但不是创建它的第一个分支,并且在命令执行之前删除的任何分支都将丢失(或者您正在查看 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

测试脚本

function mkbranch {
  git checkout -b 
  git push --set-upstream origin 
}

# 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

答案很简单。
一个分支只是一个 post-it 贴在提交上的注释。
您可以随时撕下 post-it 并将其放在其他地方或扔掉。
所以你无法分辨哪个是提交被引入的第一个分支。

更准确的说,只要

  • 分支没有被删除并且
  • 您在进行提交的系统/存储库中
  • 并且提交不早于 reflog 超时(默认为 90 天)

你可以找到,因为那样你就知道分支在哪里 post - 它在提交时的位置。