Mercurial:查找存在提交的所有分支

Mercurial:查找存在提交的所有分支,mercurial,branch,Mercurial,Branch,我有几个分支和一个ID为X的commit,我希望Mercurial返回一个存在该commit的分支列表 Mercurial已经在每次提交中存储了有关分支的信息,但只存储了有关引入该提交的分支的信息。如果您将该提交合并到其他分支中,提交仍将只存储原始分支名称。我认为您可以使用此公式获得所需的内容 hg log -r 'descendants(X) and head()' head()包括所有命名的分支头,因此即使分支尖端已合并到另一个命名分支中,它仍将与此公式一起列出 如果只想显示分支名称,则可

我有几个分支和一个ID为X的commit,我希望Mercurial返回一个存在该commit的分支列表


Mercurial已经在每次提交中存储了有关分支的信息,但只存储了有关引入该提交的分支的信息。如果您将该提交合并到其他分支中,提交仍将只存储原始分支名称。

我认为您可以使用此公式获得所需的内容

hg log -r 'descendants(X) and head()'
head()
包括所有命名的分支头,因此即使分支尖端已合并到另一个命名分支中,它仍将与此公式一起列出

如果只想显示分支名称,则可能需要对
hg log
命令使用
--template'{branchs}\n'
指令。如果每个命名分支有一个以上的头,则最终可能会使用
uniq
或类似工具

编辑:描述这将做什么

A----B----C----D----E  Branch: default (E is a merge of F into D)
      \    \    \ /
       \    \    F     Branch B1 (closed)
        \    G-----H   Branch B2
         \    \
          \    I       Branch B2
           J           Branch B3
如果执行hg log-r‘子体(C)和head()’,应该得到E、F、H和I

  • E:您得到E,因为“default”是一个分支头,尽管它有一个特殊的名称
  • 出现F是因为即使您合并到E中,它仍然是
    head()
    ,所以它显示在这个列表中
  • G不是头,尽管它包含C
  • H是一个头,显然是C的后代
  • I由G分支,也是一个头部,显然含有C
  • J是头,但没有C作为祖先

要么是搞错了,要么就是我不明白。我从默认值创建了一个新分支,向它添加了一个提交,然后为该提交执行了您的命令。它返回了新的分支和默认值,尽管我从未将该分支合并到默认值中。它不应该只返回新的分支吗?嗯。。。也许我误解了,拿出一张图表。当你谈论分支和Mercurial时,值得一提的是你所指的分支类型。Steve Losh出色的“Mercurial中的分支指南”很好地定义了其中的四个分支:命名分支(您可能的意思)、书签分支(git样式或多或少)、匿名分支(DAG中具有相同名称的分支)和克隆分支(单独的回购协议和单独的开发线均在“默认”分支机构)。