【问题标题】:How can I check if a specific remote repository branch contains a specific merged branch?如何检查特定的远程存储库分支是否包含特定的合并分支?
【发布时间】:2012-12-31 03:59:47
【问题描述】:

我想检查远程 Git 存储库上的分支是否包含具有特定名称的合并分支。例如:

  • www.example.com:/repo.git 有一个远程存储库。
  • 在该存储库中,有一个名为 myBranch 的分支。
  • 我想检查一个特定的功能分支,如myFeatureBranch 是否已合并到myBranch

如果我克隆存储库并签出myBranch,我可以做git show-ref --verify refs/heads/myFeatureBranch,但这不是我想做的。我必须在没有克隆的情况下使用远程分支。

我已经玩过git ls-remote --heads www.example.com:/repo.git,但我唯一得到的是一个远程头列表。以前有人这样做过吗?

【问题讨论】:

  • 远程头的列表中不包括分支吗?
  • 是的,但它没有指定有关历史结构的任何内容。即,它不会将 DAG 行走到那种程度。

标签: git branching-and-merging


【解决方案1】:

Git 按设计在本地运行

Git 的分布式本质是围绕几个基本概念设计的:

  1. 大多数操作都是本地操作,只有少数例外,例如 pushls-remote
  2. 历史是根据提交对象计算的。

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

远程引用

git-ls-remote 命令在上游搜索 refs 时很有用,但对历史记录无效。例如:

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> 查找包含的分支。

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

【讨论】:

    【解决方案2】:

    您无法在遥控器上执行命令。它只是一种同步机制。您需要克隆才能执行常规命令。

    您可能需要查找git branch -a --contains

    【讨论】:

    • 谢谢,这不是好消息...所以我必须找到另一种方法,也许克隆服务器上的存储库,然后通过 shell 或类似的方式进行通信。 :)
    • 如果您拥有服务器,则无需重新克隆。您也可以在裸仓库上执行这些命令。但是你需要 ssh 到那台机器上并按照你说的在那台机器上执行。
    猜你喜欢
    • 2012-01-03
    • 1970-01-01
    • 2016-05-02
    • 2013-04-24
    • 1970-01-01
    • 2018-12-23
    • 2015-08-03
    • 2014-09-21
    • 1970-01-01
    相关资源
    最近更新 更多