如何列出从特定分支的任何提交创建的所有git分支

如何列出从特定分支的任何提交创建的所有git分支,git,merge,contains,Git,Merge,Contains,有几个问题与我的问题很接近,但并不完全相同 我想列出在git分支的历史记录中任何一点上由git分支创建的所有分支 类似问题的答案包括使用git branch--contains[branch name],但这并不能实现我的目标 考虑以下(简单)示例和树: $ git init $ git checkout -b master $ touch master.txt $ git add . $ git commit -m "Initial master commit" $ git checkout

有几个问题与我的问题很接近,但并不完全相同

我想列出在git分支的历史记录中任何一点上由git分支创建的所有分支

类似问题的答案包括使用
git branch--contains[branch name]
,但这并不能实现我的目标

考虑以下(简单)示例和树:

$ git init
$ git checkout -b master
$ touch master.txt
$ git add .
$ git commit -m "Initial master commit"
$ git checkout -b develop
$ touch develop.txt
$ git add .
$ git commit -m "Initial develop commit"
$ git checkout -b feature/a
$ touch a.txt
$ git add .
$ git commit -m "feature/a commit"
$ git checkout develop
$ git checkout -b feature/b
$ touch b.txt
$ git add .
$ git commit -m "feature/b commit"

master
      \
       \         feature/a
        \       /
         develop
                \
                 feature/b

如果我想获得所有包含
develope
分支的分支,我可以执行
git分支--contains develope
,我将得到以下结果:

$git分支--包含开发
发展
特征/a
功能/b
酷。但让我们使用一个更真实的示例(
-
是提交),其中有多个功能分支在不同时间合并:

$git签出开发
$git合并功能/a
$git分支机构-d功能/a
主人
\
\特征/a
\       /         \
发展-
\
功能/b
在本例中,
feature/a
已完成,合并到develop中,然后被删除。现在,
develope
的最新提交在
功能/b
之前,该功能仍在开发中。现在,如果我运行git branch--contains develop,我会得到以下结果:

$git分支--包含开发
发展
不酷。我想看到的是
develope
feature/b
,因为
feature/b
是从一个较旧的
develope
提交分支出来的

我有一个复杂的项目,有大量的功能、错误修复、增强等。分支在
开发
的生命周期中从不同的角度进行了划分,但并不是所有分支都被引入,现在,
git分支--contains develope
告诉我哪些分支是优秀的是毫无用处的。

当我结束写这个问题时,我意识到答案是什么(很感谢把想法写在“纸上”)

命令
git分支--contains develope
只考虑
develope
分支的最新提交,因此需要获取
develope
分支的第一个提交SHA

不幸的是,这正是事情变得棘手的地方。发件人:

Git中的分支只是指向[A]提交的轻量级可移动指针

由于分支只是一个轻量级指针,git对其历史或创建日期没有明确的概念

我花了很长的时间来拼凑一种方法来获得一个分支的原始提交SHA,并最终提出了一个,但有一些先决条件/限制

  • 您需要知道您希望原始提交SHA用于哪个分支(在我们的例子中,
    develope
  • 您需要知道它所分支的分支,并且该分支不能领先于它(在我们的例子中,
    master
    )-这肯定不理想,但欢迎任何人提供更好的答案:)
$git branch——包含$(git rev list master..develope | tail-1)
发展
功能/b

如果你好奇的话,
$()
中的内容就是我如何从git版本列表中获得最早的提交SHA(比原始的提交SHA更好,这要感谢@alfunx的评论)。

你可以用
git版本列表主控程序来替换
$()
中的命令。开发| tail-1
。谢谢@alfunx!这就不那么复杂了:)(答案更新)