什么是hg pull --rebase中使用的rebase命令

six*_*ude 2 mercurial rebase

通常,在HG中,我的工作流程是专门使用:

hg pull --rebase
Run Code Online (Sandbox Code Playgroud)

如果我想在两个命令中运行它,我该怎么做?

hg pull
hg rebase <probably with some options?>
Run Code Online (Sandbox Code Playgroud)

Rei*_*nds 6

什么hg pull --rebase确实是确实先做hg pull,然后hg rebase用最重要的是默认参数(你可以看一下代码rebase.py在函数中水银的分布pullrebase()),但只有当任何新的修订是在拉.如果不需要变基,hg pull --rebase则将更新为新的分支提示.所以,hg pull && hg rebase大致是正确的,但并没有完全捕获一些极端情况(没有新的修订,没有必要的rebase).

默认情况下,hg rebase将使用工作目录的父级作为rebase 的基本修订版本和当前分支的最新修订版本(通常是您刚刚提取的内容)作为目标.简而言之,它相当于hg rebase -b . -d 'last(branch(.))'.

在这种情况下,"基础修订"意味着什么?这意味着Mercurial将去寻找基本修订版和目的地中最不常见的祖先.然后它会将所有内容重新定义,但不包括目的地上最不常见的祖先.即,指定基本修订版允许您在要修改的分支[1]上选择几乎任何修订版本,并让Mercurial找出属于该分支的修订版本.

请注意,因为rebase基于当前工作目录的父级,这意味着如果您当前的结帐不是您正在处理的内容,那么hg pull --rebase实际上可能会尝试重新绑定不同的分支(它通常会失败,因为这些修订通常是公共阶段的一部分,但如果您正在使用所谓的非发布存储库 并且不使用命名分支,则需要注意这一点.

[1]此上下文中的分支是指匿名或拓扑分支,而不是命名分支.有关hg help glossary详细信息,请参阅