【问题标题】:How to list branches that contain a given commit on a specific repository?如何列出包含特定存储库上给定提交的分支?
【发布时间】:2016-05-02 17:22:06
【问题描述】:

所以我已经阅读了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 存储库中不存在。

【问题讨论】:

  • 你执行git fetch archive(或拉)了吗?
  • 没有。我没有。将其与答案中的其他说明一起执行,就可以了。

标签: git git-branch git-tag


【解决方案1】:

您需要git branch--all--containscommit 才能查看其他遥控器的分支。

这仍然取决于您从它们所在的任何远程获取要检查的提交 - 在您的情况下为 git fetch archive

没有它,您的本地存储库就没有提交,几乎什么都不会起作用。例如,如果没有提交,您就不能 git log 等。有各种(半工作)解决方法,例如通过 SSH 连接到服务器并对其进行处理(如果可用)或使用各种 Web API(GitHub、Stash)(如果可用),但基本上你需要存在的提交。 git ls-remote 是一个例外,它可以在远程存储库上工作而无需本地任何东西。

【讨论】:

    【解决方案2】:

    鉴于您声明的限制(特别是,您有一个从标记名到 SHA-1 ID 的映射,并且根本没有其他信息),您无法得到您想要的。

    谓词的定义:

    分支 name 包含提交 id

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

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

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

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


    1就本定义而言,节点是它自己的祖先。在这种特殊的退化情况下(分支的标签和尖端匹配),当然,您可以通过查看分支尖端的 SHA-1 ID 立即回答问题,这些值可通过git ls-remote 获得。

    【讨论】:

      猜你喜欢
      • 2010-11-28
      • 2012-12-31
      • 2015-03-30
      • 1970-01-01
      • 2012-12-19
      • 2013-04-24
      • 1970-01-01
      • 2017-12-02
      相关资源
      最近更新 更多