如何检查特定的远程仓库分支是否包含特定的合并分支?

7
我想检查远程Git仓库中的分支是否包含已合并了特定名称的分支。例如:
  • 有一个位于www.example.com:/repo.git的远程仓库。
  • 在该仓库中,有一个名为myBranch的分支。
  • 我想要检查特定功能分支是否已合并到myBranch中,例如myFeatureBranch
如果我克隆了该仓库并检出了myBranch,那么我可以运行命令git show-ref --verify refs/heads/myFeatureBranch,但这不是我想要的。我必须通过远程分支而无需克隆来执行此操作。
我已经尝试过git ls-remote --heads www.example.com:/repo.git,但我得到的只是一系列远程引用。有人之前做过这个吗?

远程头列表中不包括该分支吗? - Explosion Pills
是的,但它并没有具体说明任何关于历史结构的内容。也就是说,它没有到那个程度遍历DAG。 - Adam Dymitruk
2个回答

1

Git的设计本质上是本地操作

Git的分布式本质基于几个基本概念的设计:

  1. 大多数操作都是本地的,只有一些小的例外,比如pushls-remote
  2. 历史记录是从提交对象中计算出来的。

这意味着探索历史记录是一个本地操作,不能在远程存储库上执行。

远程引用

git-ls-remote命令在搜索上游引用时很有用,但不适用于历史记录。例如:

git ls-remote origin | egrep 'some_branch_name|merge'

将会在远程打印与您正在查找的命名分支匹配的引用,或者(在GitHub的情况下)从合并的拉取请求创建的引用,例如:

381a77fd72ea594cfce5c82c845ad3d10bb87d71        refs/pull/99/merge

git-ls-remote 命令显示远程存储库中可用的引用以及相关联的提交 ID。但是,如果您想找出包含给定提交的分支,您需要访问完整的历史记录;这需要您拥有本地副本。

查找包含合并提交的分支

我知道处理此问题的最佳方法如下:

  1. 使用 git fetch --all origin 获取所有分支。
  2. 使用 git log --merges 查找所需的合并提交。
  3. 使用 git branch --all --contains <commit> 查找包含该提交的分支。

这将为您提供包含指定提交的分支列表。


1

您无法在远程执行命令。它只是一个同步机制。您需要克隆才能执行常规命令。

您可能想查找git branch -a --contains


谢谢,这并不是一个好消息... 所以我必须找到另一种方法,也许是在服务器上克隆存储库,然后通过 shell 通信,或者类似的方式。 :) - Dorrian
如果您拥有服务器,则无需重新克隆。您也可以在裸库上执行这些命令。但是,您需要通过ssh连接到该机器并在该机器上执行。 - Adam Dymitruk

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