gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 13:36:36 24 4
gpt4 key购买 nike

有几个问题接近我要问的问题,但又不完全相同。

我想列出所有分支,这些分支是 在该分支历史中的任何时候 创建的 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

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

$ git branch --contains develop

develop
feature/a
feature/b

很酷。但是让我们使用一个更真实的示例(- 是提交),其中有多个功能分支在不同时间 merge :

$ git checkout develop
$ git merge feature/a
$ git branch -d feature/a

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

在这种情况下,feature/a被完成, merge 到develop中,然后被删除。现在 develop 的最新提交领先于 feature/b,后者仍在进行中。现在,如果我运行 git branch --contains develop,我会得到以下信息:

$ git branch --contains develop

develop

不酷。我想看到的是 developfeature/b,因为 feature/b 的旧提交的分支>开发

我有一个复杂的项目,其中包含大量特性、错误修复、增强等。分支由 develop 生命周期中的各个点组成,但并非所有分支都被引入,现在 git branch --contains develop 在告诉我哪些分支是优秀的方面毫无用处。

最佳答案

当我结束写问题时,我意识到答案是什么(是的,把想法记在“纸上”)。

命令git branch --contains develop只考虑develop分支的最新提交,所以需要获取的第一个commit SHA开发分支。

不幸的是,这就是事情变得棘手的地方。来自 Pro Git § 3.1 Git Branching - What a Branch Is :

A branch in Git is simply a lightweight movable pointer to [a] commit.

因为分支只是一个轻量级的指针,git 没有关于它的历史或创建日期的明确概念。

我花了太长时间寻找一种方法来获取分支的原始提交 SHA,并最终想出了一个方法,但有一些先决条件/限制。

  • 您需要知道您想要哪个分支的原始提交 SHA(在我们的例子中,develop)
  • 你需要知道它被分支出来的分支并且那个分支不能在它之前(在我们的例子中,master)——这绝对不理想,但欢迎任何人提供更好的答案:)
$ git branch --contains $(git rev-list master..develop | tail -1)

develop
feature/b

如果你很好奇,$() 中的内容就是我如何从 git rev 列表中获取最早的提交 SHA(比原始方法更好,感谢@alfunx 的评论)。

关于git - 如何列出从特定分支的任何提交创建的所有 git 分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58439482/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com