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
Version control 在mercurial中合并书签_Version Control_Mercurial_Branching And Merging - Fatal编程技术网

Version control 在mercurial中合并书签

Version control 在mercurial中合并书签,version-control,mercurial,branching-and-merging,Version Control,Mercurial,Branching And Merging,在昨天询问了mercurial中的分支之后,我决定为短期分支(功能)试用书签,如下所示。 然而,现在当我试图将书签头合并到开发修订版中时,我发现以下错误: hg update dev-1.1 hg merge feature1 abort: nothing to merge 我做错了什么? 我的回购协议的图形表示: o changeset: 5:fa2b19961b46 | bookmark: feature1 | description: Work on feature 1

在昨天询问了mercurial中的分支之后,我决定为短期分支(功能)试用书签,如下所示。
然而,现在当我试图将书签头合并到开发修订版中时,我发现以下错误:

hg update dev-1.1
hg merge feature1
abort: nothing to merge
我做错了什么?

我的回购协议的图形表示:

o  changeset:   5:fa2b19961b46
|  bookmark:    feature1
|  description:  Work on feature 1 finished.
|
| o  changeset:   4:6ea0155d4d89
| |  bookmark:    feature2
| |  description: Work on feature 2 started. 
| |
o |  changeset:   3:44e335b5426c
| |  bookmark:    feature1
|/   description: Work on feature#1 started.
|
@    changeset:    2:407b3b94624f
|    tag:          dev-1.1
|    description:  Development for release 1.1 started. 

正如上面所说,没有什么可以合并的-您应该使用update:

$ hg update feature1
您只能合并历史的不同部分,这里的
dev-1.1
变更集只是
feature1
变更集的祖先。Mercurial 2.1说

$ hg merge feature1
abort: nothing to merge
(use 'hg update' or check 'hg heads')
在这种情况下,我们希望这将使错误更清楚

如果您已将
dev-1.1
变更集添加书签(而不是标记它),则

$ hg update
现在(使用Mercurial 2.1)将更新
dev-1.1
书签。所以如果你从

$ hg bookmarks
 * dev-1.1                   0:b1163a24728f
   feature1                  3:c84f04513651
   feature2                  2:e60dd08af282
然后更新:

$ hg update
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
updating bookmark dev-1.1
然后更新书签:

$ hg bookmarks
 * dev-1.1                   3:c84f04513651
   feature1                  3:c84f04513651
   feature2                  2:e60dd08af282
对于早期版本,您必须执行以下操作

$ hg update feature1
$ hg bookmark -f dev-1.1
如果普通的
hg更新
没有将您带到正确的变更集,例如,如果您想与
feature2
进行“合并”,则此项仍然适用



在历史没有真正偏离的情况下使用merge的想法来自Git。在该系统中,有一个快进合并的概念,这就是我们在Mercurial中所称的更新。

如果变更集已公开,您可以强制Mercurial进行合并,如果您希望坚持将每个功能作为存储库中的合并:

$ hg update feature1
$ hg debugsetparents dev-1.1 feature1
$ hg commit -m 'Feature 1 reviewed by me.'
$ hg bookmark -d feature1
如果变更集尚未公开,则可以将变更集折叠为一个:

$ hg update feature1
$ hg rebase --dest dev-1.1 --collapse
$ hg bookmark -d feature1

哦因此,我需要为
dev-1.1
-修订版中的每个功能运行
hg update feature1&&hg merge feature2
等等?合并
feature1
feature2
是另一回事。但是,是的,当这些特性并行生成时(比如在您的案例中),您需要将它们合并到
dev-1.1
轨道中。如果您只有
feature1
,那么就没有并行开发,因此
hg update
是正确的答案。这并没有帮助(至少在mercurial 2.7中),
hg merge--preview feature1
将列出所有适当的变更集。。。但是实际的合并仍然会出现这里讨论的错误。@TiStrga:这是因为
hg merge--preview REV
只显示
hg log-r'::REV-:。
。也就是说,它向您显示与之合并的修订的祖先,这些祖先还不是工作副本父修订的祖先。如果
REV
不是一个可以合并的有效版本,我们可能应该中止,而不是显示它;hg bookmark-f dev-1.1是否在功能2中而不是功能1中“合并”?(也就是说,要更新但也要升级dev-1.1书签。)