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

时间:2011-08-23 18:47:58

标签: mercurial branch

我有一些分支和一个ID为X的提交,我希望Mercurial返回一个存在该提交的分支列表。

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

1 个答案:

答案 0 :(得分:10)

我认为你可以用这个公式得到你想要的东西

hg log -r 'descendants(X) and head()'

head()包括所有已命名的分支头,因此即使分支的尖端已合并到另一个命名分支中,它仍将使用此公式列出。

如果您只想显示分支名称,则可能需要对--template '{branches}\n'命令使用hg log指令。如果每个命名分支有多个头,则最终可能会使用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 'descendants(C) and head()',你应该得到E,F,H和I.

  • E :你得到E,因为'default'是一个分支头,即使它有一个特殊名称。
  • F 出现,因为即使您合并到E中,它仍然是head(),因此它会显示在此列表中
  • G 不是头,虽然它确实包含C
  • H 是一个头,显然是C
  • 的后代
  • 从G分支,也是一个头,显然包含C
  • J 是头,但没有C作为祖先