如何获取包含 Mercurial 中特定修订的所有分支的列表?

Posted

技术标签:

【中文标题】如何获取包含 Mercurial 中特定修订的所有分支的列表?【英文标题】:How to get a list of all branches containing specific revisoin in Mercurial? 【发布时间】:2021-03-02 20:38:00 【问题描述】:

要根据this*** 获取 Git 中包含特定修订的所有分支的列表,可以使用以下命令:

git branch --contains <commit>

如何使用 Mercurial 完成这项工作?

我还希望输出尽可能干净。例如hg branches 也返回分支中的最后一个修订:

new-branch                     2:657883530997
default                        1:6c8931261776 (inactive)

但最好只返回分支的名称,每个分支都在一个新行上,以便于机器处理。

【问题讨论】:

【参考方案1】:

在 Mercurial 中,只有一个分支可以包含任何特定的提交。只需检查提交本身并查看它在哪个分支上;那是它将永远存在的分支。如果愿意,您可以将该提交复制到不同分支上的新提交(例如使用 hg graft),但它会有不同的哈希 ID。

命令hg log -r <em>rev</em> -T 'branch' 足以提取分支名称。修订说明符可以是相对数字或哈希 ID。

【讨论】:

在这种情况下,是否有可能在创建当前分支之前获取历史中某处发现修订的分支列表? 是:找到所有提交的子集(包括提交本身),并询问它们的分支是什么。通过排序和唯一传递运行结果列表,您将获得所需的分支名称集。 “提交 C 的后代”的 revspec 只是 C:: 所以 hg log -r C:: -T 'branch' 列出了这些分支名称;跑过sort -u,你很好。 请注意,与 Git 的 .. 图形运算符不同,Mercurial 的 :: 图形运算符是完全包容的。也就是说,在x::y,而不是x &lt; rev &amp;&amp; rev &lt;= y(Git 的测试中,x <= rev && rev <= y。 (通常应该使用 作为前置,而不是&lt;,但我不确定这些运算符是否会在视觉上明显不同。) @torek: 1. 我想,日志命令必须是 hg log -r .:: -T "branch\n" 用于“每行分支”并管道进入排序 2。作为 shell 别名(log+sort in一个命令)

以上是关于如何获取包含 Mercurial 中特定修订的所有分支的列表?的主要内容,如果未能解决你的问题,请参考以下文章

使用mercurial克隆或拉到标记后如何获取标记变更集?

在 mercurial 中,如何将反向补丁应用于特定文件?

如何检查某些 Mercurial 遥控器上是不是存在特定版本?

如何在IntelliJ(Mercurial)中可视化修订图

Subversion:如何获取所有活动的,未合并的分支的列表

拉动修订未被标记为公共阶段