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

kru*_*pan 34 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
Run Code Online (Sandbox Code Playgroud)

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

hg merge --preview default
Run Code Online (Sandbox Code Playgroud)

但是他们不知道foo来自哪里.他们可以运行:

hg glog
Run Code Online (Sandbox Code Playgroud)

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

kru*_*pan 51

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

hg log -r "parents(min(branch(foo)))"
Run Code Online (Sandbox Code Playgroud)

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

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


dls*_*dls 8

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

hg update BRANCH
hg log -r "max(ancestors(BRANCH) and not branch(BRANCH))"
Run Code Online (Sandbox Code Playgroud)

这将打印出单个修订版,即功能分支的"分支点".