所以,我已阅读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
存储库中。
答案 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}获得}。