Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Mercurial what';hg接枝和hg再基的区别是什么_Mercurial_Rebase - Fatal编程技术网

在Mercurial what';hg接枝和hg再基的区别是什么

在Mercurial what';hg接枝和hg再基的区别是什么,mercurial,rebase,Mercurial,Rebase,我知道它是一个(捆绑的)扩展,而它是一个核心特性(取代了(捆绑的)扩展) 嫁接记录如下: 将其他分支的更改复制到当前分支 此命令使用Mercurial的合并逻辑从其他分支复制单个更改,而不合并历史图中的分支。这有时被称为“后移”或“樱桃采摘” rebase记录如下: Rebase允许在Mercurial的历史记录中移动提交(使用一系列内部合并)。这有很多用途: 在分支之间移动变更集 “线性化”历史 重新排序变更集 将多个更改折叠为一个更改集 两者似乎都使用合并在分支之间移动或复制变更集 嫁接

我知道它是一个(捆绑的)扩展,而它是一个核心特性(取代了(捆绑的)扩展)

嫁接
记录如下:

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

此命令使用Mercurial的合并逻辑从其他分支复制单个更改,而不合并历史图中的分支。这有时被称为“后移”或“樱桃采摘”

rebase
记录如下:

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

  • 在分支之间移动变更集
  • “线性化”历史
  • 重新排序变更集
  • 将多个更改折叠为一个更改集
两者似乎都使用合并在分支之间移动或复制变更集

嫁接拷贝。重新基址移动。但是,
rebase——保留
副本

通常情况下,我似乎可以通过任何一种方式实现复制变更集的目标。 我用哪一个重要吗?什么时候我应该选择一个而不是另一个

例如,仅当复制到另一个命名分支时才应使用嫁接?或者只有当只有一个变更集时



编辑:可能是因为rebase是嫁接的潜在不安全超集,但在编辑本地历史的开发过程中只能与
草稿
变更集一起使用,而嫁接是rebase的一个安全子集,在维护过程中可以与
公共
变更集一起使用以进行后移植吗?

hg graft
允许“樱桃采摘”,正如您在问题中所指出的。例如,您可以运行
hg graft-D“2085::2093而不是2091”
,仅复制另一个修订版中的一些更改。相比之下,
hg rebase
(带或不带
——keep
)将获取您指定的任何更改集及其所有分散更改

另外,
rebase
允许您折叠变更集(使用
--collapse
)。据我所知,
graft
不允许

我注意到的另一个不同点是:
hg graft--edit 123
允许您将修订版123移植到工作目录并编辑提交消息。我找不到与之等效的
hg rebase
。不过,我应该指出,
hg histedit
还允许在重定基址时编辑提交消息

可能还有其他我没有想到的不同之处。所以社区:请在评论中指出这些,我会很高兴地修改这个答案,使其更加完整


有关更多详细信息,请参见和。

Graft将复制并引用原始变更集,这在樱桃采摘中非常有用。您应该可以使用“hg log--debug”来查看此信息。@Mathiasdm:您是指
Graft_源代码
?rebase与
rebase_源代码
不一样吗?哦,这很有趣,我不知道rebase_来源存在:-)嗯,在这种情况下,我认为你建议的重基与嫁接之间没有太大区别。@Peter也许吧。我在文档中找不到任何关于做这种选择性重基的内容。我只是用一个样本库测试了一下,结果似乎没问题,尽管我从hg收到了一些不熟悉的投诉但是,请注意,它肯定只适用于
hg-rebase--keep
--如果没有
--keep
,您就不能选择一个rebase,否则hg会翻转出来。
hg-rebase
不允许“樱桃选择”作为目标的祖先的变更集,即使使用
--keep
,但
hg-graft
使用
--force
。这可能很有用,例如,当变更集在较早时已应用,后来又被还原,并且您现在想再次应用时。请注意,我的主要问题不一定是要获得所有细微技术差异的列表,而是要找到一个规则/基本原理,以便在两者之间做出决定。还是我应该用更方便的?