如何列出从特定分支的任何提交创建的所有git分支
有几个问题与我的问题很接近,但并不完全相同 我想列出在git分支的历史记录中任何一点上由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 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!这就不那么复杂了:)(答案更新)