如何列出特定代码仓库中包含给定提交的分支?

5

我已经阅读了Git:如何找出标记在哪个分支上?和许多其他帖子,我已经知道如何使用:git branch --contains tag

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

背景

我使用以下命令从远程存储库archive中提取了标记列表:

git ls-remote --tags archive

现在,针对提取出来的每个标签,我希望获得包含它们的分支列表。 使用命令:git branch --contains tag 无法帮助获取到标签所在的分支,因为这些标签并不存在于 origin 代码库中。

你执行了 git fetch archive(或 pull)吗? - conio
没有,我没有这样做。按照你回答中的其他指示执行,就解决了问题。 - idanshmu
2个回答

8
您需要运行git branch--all--containscommit命令以查看其他远程分支。
这仍然取决于您从任何远程位置获取要检查的提交 - 在您的情况下,运行git fetch archive命令。
如果没有这些提交,您的本地存储库将无法正常工作,例如,没有这些提交,您无法运行git log等操作。虽然有各种(半工作的)解决方法,比如通过SSH连接到服务器并在其上工作(如果可用),或者使用各种Web API(GitHub,Stash)(如果可用),但基本上您需要这些提交。 git ls-remote是唯一可以在没有本地内容的情况下在远程存储库上工作的例外。

3
考虑到您所述的限制(具体来说,您有从标签名称到SHA-1 ID的映射,但没有其他信息),您无法得到想要的结果。
谓词的定义:
分支名称包含提交ID 就是ID名称映射到的SHA-1的祖先。为了测试这个命题,您必须能够遍历图形,从名称映射到的节点开始,并通过图形中的所有路径向后走,直到您耗尽节点或遇到给定的ID
但是,要遍历图形,您必须拥有该图形。
这意味着只有两种方法可以找到答案:自己拥有图形,或者获取一些拥有图形的实体来为您回答问题。Git和Git服务器中没有内置的功能来执行后者(尽管某些服务器可以将其作为附加功能提供)。
另一方面,如果您可以运行git ls-remote,则也可以检索存储库,因此您可以自己回答问题(当然,需要检索存储库)。
对于这个定义的目的,节点是它自己的祖先。在这种特殊的退化情况下(标记和分支末端匹配的情况下),您当然可以通过查看分支末端的SHA-1 ID来立即回答问题,而这些值可通过git ls-remote获得。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接