通常,在HG中,我的工作流程是专门使用:
hg pull --rebase
如果我想在两个命令中运行它,我该怎么做?
hg pull
hg rebase <probably with some options?>
答案 0 :(得分:6)
hg pull --rebase
做的事情确实是首先使用默认参数hg pull
然后hg rebase
(您可以查看rebase.py
中的代码功能pullrebase()
)中的Mercurial分布,但仅在中提取任何新修订时。如果不需要变基,hg pull --rebase
将更新为新的分支提示。因此,hg pull && hg rebase
大致正确,但并未完全捕捉到一些极端情况(没有新版本,也没有必要的修改)。
默认情况下,hg rebase
将使用工作目录的父级作为rebase的基本修订版和当前分支的最新版本(通常是您刚刚提取的内容) )作为目的地。简而言之,它相当于hg rebase -b . -d 'last(branch(.))'
。
“基础修订”在这种情况下意味着什么?这意味着Mercurial将去寻找基本修订版和目的地中最不常见的祖先。然后它会将所有内容重新定义,但不包括目的地上最不常见的祖先。即,指定基本修订允许您在分支[1]上选择要修改的几乎任何修订,并让Mercurial确定哪些修订属于该分支。
请注意,因为rebase基于当前工作目录的父级,这意味着如果您当前的结帐不您正在处理的内容,那么hg pull --rebase
可能会感到惊讶你实际上试图改变一个不同的分支(它通常会失败,因为这些修订通常是公共阶段的一部分,但如果你正在使用所谓的non-publishing repositories <你需要注意的事情em>和不使用命名分支。)
[1]此上下文中的分支是指匿名或拓扑分支,而不是命名分支。有关详细信息,请参阅hg help glossary
。
答案 1 :(得分:1)
如果你想手工变装(坏主意),你必须
hg help rebase
-s
和-d
)让我们看看玩具回购:
回购A
A>hg log -T "{rev} {desc}\n"
1 A2
0 A1
有2个变更集A1和A2被克隆到repos B
和C
(B表示pull --rebase A
,C表示清除pull A
)
并且在克隆之后向A和B + C添加了两个额外的更改集以测试您的用例(分歧历史记录)
A>hg log -T "{rev} {desc}\n"
3 A2++
2 A2+
1 A2
0 A1
B>hg log -T "{rev} {desc}\n"
3 B2
2 B1
1 A2
0 A1
C状态与B
相同B>hg pull --rebase
...
B>hg log -T "{rev} {desc}\n" -G
@ 5 B2
|
o 4 B1
|
o 3 A2++
|
o 2 A2+
|
o 1 A2
|
o 0 A1
即。重新拉动的结果是&#34;线性历史与远程变化之上的局部变化&#34;相比之下只是拉从C
C>hg log -T "{rev} {desc}\n" -G
@ 5 A2++
|
o 4 A2+
|
| o 3 B2
| |
| o 2 B1
|/
o 1 A2
|
o 0 A1
或者,在GUI中
并且为了从C获得B,你必须将2(-s 2
)重新绑定到新的父5(-d 5
),但是短hg rebase -b 2
也可以使用同样的效果