在Mercurial中,hg移植物和hg rebase之间的区别是什么

时间:2015-04-09 13:27:59

标签: mercurial rebase

我知道Rebase是(捆绑的)扩展程序,而Graft是核心功能(取代了Transplant(捆绑的)扩展程序。)

graft 记录为:

  

将其他分支的更改复制到当前分支

     

此命令使用Mercurial的合并逻辑从其他分支复制单个更改,而不在历史记录图中合并分支。这有时被称为“backporting”或“cherry-picking”。

rebase 记录为:

  

Rebase允许在Mercurial的历史中移动提交(使用一系列内部合并)。这有很多用途:

     
      
  • 在分支之间移动变更集
  •   
  • “线性化”历史
  •   
  • 重新排序变更集
  •   
  • 将多个更改折叠为一个更改集
  •   

两者似乎都使用合并来移动或复制分支之间的变更集。

嫁接副本。 Rebase移动。但是rebase --keep份。

通常,我似乎可以实现以任何方式复制变更集的目标。 我使用哪一个是否重要?我什么时候应该更喜欢一个?

E.g。复制到另一个名为的分支时,是否应该使用移植?或者只有只有一个变更集?


编辑:可能是rebase是一个潜在的不安全的移植超集,但只能在开发过程中用于draft变更集以编辑本地历史记录,而移植是一个安全的rebase子集,可用于在后台移植维护期间public更改了设置?

1 个答案:

答案 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 documentationthe Rebase Extension documentation