你如何找到一个命名的mercurial分支的父级?

时间:2011-03-31 19:48:04

标签: mercurial branch

在某个时间点你有一个mercurial命名分支,让我们调用它,默认,你从默认创建一个命名分支,让我们调用它,foo,你在foo上做一些提交。那种工作看起来像这样:

hg update default
hg branch foo
hg commit -m "created branch foo"
# work, work
hg commit
# work work
hg commit

与此同时,其他人正在默认提交。现在有人被告知要对foo做一些工作,他们想看看是否以及可能需要从foo的父分支合并的内容。如果他们知道foo来自默认,他们就可以运行:

hg merge --preview default

但是他们不知道foo来自哪里。他们可以跑:

hg glog

或者启动tortoisehg并将该行追溯到foo的父级,但是他们可以运行一个命令来告诉他们foo的父分支吗?

4 个答案:

答案 0 :(得分:52)

感谢revset示例。我摆弄了一下,找到了我喜欢的解决方案:

hg log -r "parents(min(branch(foo)))"

将打印foo分支上第一次提交的修订版本。您可以在该变更集中查找分支(或缺少指示默认分支的分支),这是foo的父分支(至少在问题中定义了父分支的方式)。

但我有这种唠叨的感觉......父母()可以返回多个变更集。分支上的第一次提交是否有两个父母?我想不出那会怎么样。

答案 1 :(得分:8)

如果您使用的是Mercurial v1.6.0或更高版本,则可以使用revsets查找此信息。例如:

hg update BRANCH
hg log -r "max(ancestors(BRANCH) and not branch(BRANCH))"

这将打印出单个版本,即功能分支的“分支点”。

答案 2 :(得分:4)

假设你有Mercurial v1.7或更高版本,可以使用revset来完成。

hg log -r "ancestor(<changeset>, <changeset>)"

其中changeset可以是分支,标记,修订版ID或变更集哈希。

这将打印出两个变更集的最大共同祖先。

如果没有共同的祖先,则结果为空。

答案 3 :(得分:2)

根据@ krupan的回答,我想出了以下内容:

hg log --rev "parents(min(branch(.)))" --template "{branch}\n"

这将仅打印父分支的名称。

  • --rev "revset expression"使用revset表达式指定revset
  • branch()选择指定分支的所有修订版。
  • min()选择指定修订范围的第一个修订版。
  • parents()选择指定修订范围的父级。
  • .表示当前版本。或者,您可以按名称指定任何修订。
  • --template "{branch}\n"指定仅打印分支名称的自定义模板。