我知道Rebase是(捆绑的)扩展程序,而Graft是核心功能(取代了Transplant(捆绑的)扩展程序。)
graft
记录为:
将其他分支的更改复制到当前分支
此命令使用Mercurial的合并逻辑从其他分支复制单个更改,而不在历史记录图中合并分支。这有时被称为“backporting”或“cherry-picking”。
rebase
记录为:
Rebase允许在Mercurial的历史中移动提交(使用一系列内部合并)。这有很多用途:
- 在分支之间移动变更集
- “线性化”历史
- 重新排序变更集
- 将多个更改折叠为一个更改集
两者似乎都使用合并来移动或复制分支之间的变更集。
嫁接副本。 Rebase移动。但是rebase --keep
份。
通常,我似乎可以实现以任何方式复制变更集的目标。 我使用哪一个是否重要?我什么时候应该更喜欢一个?
E.g。复制到另一个名为的分支时,是否应该使用移植?或者只有只有一个变更集?
编辑:可能是rebase是一个潜在的不安全的移植超集,但只能在开发过程中用于draft
变更集以编辑本地历史记录,而移植是一个安全的rebase子集,可用于在后台移植维护期间public
更改了设置?
答案 0 :(得分:32)
hg graft
允许"采摘,"正如你在问题中提到的那样。例如,您可以运行hg graft -D "2085::2093 and not 2091"
仅从其他修订中复制某些更改。相比之下,hg rebase
(有或没有--keep
)将获取您指定的任何变更集以及其所有其后代变更。
此外,rebase
允许您折叠更改集(使用--collapse
)。据我所知,graft
没有。
我注意到的另一个区别是:hg graft --edit 123
允许您将修订版123移植到工作目录并编辑提交消息。我找不到hg rebase
等价物。不过,我应该指出,hg histedit
还允许在重新定位时编辑提交消息。
我可能没有想到其他差异。 SO社区:随意在评论中指出这些内容,我很乐意修改这个答案,使其更加完整。
有关详细信息,请参阅the graft
documentation和the Rebase Extension documentation。