如何在特定存储库中列出包含给定提交的分支?

时间:2016-01-26 07:39:07

标签: git git-branch git-tag

所以,我已阅读Git: How to find out on which branch tag is?以及其他许多帖子,我已经知道如何使用: git branch --contains tag

但是,我仍然需要知道如何列出在特定存储库中包含给定提交(或标记)的分支

背景

我使用以下方法从远程存储库archive中提取了一个标记列表:

git ls-remote --tags archive

现在,对于每个提取的标签,我希望得到包含分支的列表。 使用命令: git branch --contains tag 没有帮助,因为找不到标签,因为它们不存在于origin存储库中。

2 个答案:

答案 0 :(得分:7)

您需要git branch --all --contains commit 才能看到其他遥控器的分支。

这仍然取决于您从他们所处的任何遥控器中获取您想要检查的提交 - git fetch archive

没有它,你的本地存储库没有提交,几乎没有任何工作。例如,如果没有提交,您就可以git log等。有各种各样的(半工作)解决方法,比如SSH连接到服务器并使用它(如果它可用)或使用各种Web API(GitHub,Stash),如果它们可用,但基本上你需要提交的提交。 git ls-remote是一个例外,它可以在远程存储库上运行而不需要在本地进行任何操作。

答案 1 :(得分:3)

鉴于你所陈述的约束(具体来说,你有从tag-name到SHA-1 ID的映射而根本没有其他信息),你无法得到你想要的东西。

谓词的定义:

  

branch name 包含commit id

只是 id name 映射到的SHA-1的祖先 1 。要测试此命题,您必须能够遍历图形,从 name 映射到的节点开始,然后向后走回图形中的所有路径,直到您用完节点或遇到给定的节点 ID

要遍历图表,您必须拥有图表。

这意味着只有两种方法可以找到答案:自己拥有图表,或者获得一些具有图表的实体来为您回答问题。 git和git服务器没有内置任何内容来执行后者(尽管有些服务器可能会将其作为附件提供)。

另一方面,如果你可以运行git ls-remote,你也可以检索存储库,因此你可以自己回答这个问题(当然是以检索存储库为代价)。

1 出于此定义的目的,节点是其自己的祖先。在这个特殊的退化情况下(标记和分支的尖端匹配),当然,您可以通过查看分支提示的SHA-1 ID立即回答问题,这些值可通过{{1}获得}。