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
Mercurial/Meld中的三方合并是如何工作的?_Mercurial_Merge_Dvcs_3 Way Merge - Fatal编程技术网

Mercurial/Meld中的三方合并是如何工作的?

Mercurial/Meld中的三方合并是如何工作的?,mercurial,merge,dvcs,3-way-merge,Mercurial,Merge,Dvcs,3 Way Merge,我正在进行一个项目,在这个项目中,我有一个提交,它引入了一个功能,其中包含一些无法立即发现的主要问题。现在,我想完全删除该修订版,同时保持后续的工作,但我很难在这三方合并的问题上绞尽脑汁。这是我的项目的简化图表 o changeset: 134:7f81764aa03a | tag: tip | parent: 128:451d8a19edea | summary: Backed out changeset 451d8a19edea | | @ c

我正在进行一个项目,在这个项目中,我有一个提交,它引入了一个功能,其中包含一些无法立即发现的主要问题。现在,我想完全删除该修订版,同时保持后续的工作,但我很难在这三方合并的问题上绞尽脑汁。这是我的项目的简化图表

o changeset: 134:7f81764aa03a | tag: tip | parent: 128:451d8a19edea | summary: Backed out changeset 451d8a19edea | | @ changeset: 133:5eefa40e2a29 | | summary: (Change I need to keep keep) | | *snip 3 commits* | o changeset: 129:5f6182a97d40 |/ summary: (Change I need to keep keep) | o changeset: 128:451d8a19edea | summary: (Change that introduced a major problem) | o changeset: 127:4f26dc55455d | summary: (summary doesn't matter for this question) o变更集:134:7f81764aa03a |标签:提示 |家长:128:451d8a19edea |摘要:已备份的变更集451d8a19edea | |@changeset:133:5eefa40e2a29 ||总结:(我需要保留的更改) | | *剪报3* |o变更集:129:5f6182a97d40 |/总结:(我需要保留的更改) | o变更集:128:451d8a19edea |总结:(导致重大问题的变更) | o变更集:127:4f26dc55455d |小结:(小结对这个问题不重要)
如果我理解正确,r127和r134完全相同。当我
hg up-C-r 133
然后运行
hg merge
时,Meld会弹出三种形式的文件:local、base和other。local似乎是r133,但我很难理解“base”和“other”是什么意思。

local是r133

其他是r134

碱基是r128(r133和R134的共同祖先)


当您执行三方合并时,它会将所有三方合并在一起,以帮助您决定从何处进行合并。通过查看其他版本中的更改以及共同祖先的外观,您可以对保留什么和更改什么做出更加明智的决定。

您的问题确实令人困惑,但以下是一些可能对您有所帮助的信息

  • 什么是基地
Base是当前已签出并使用的修订版的未修改版本。在可能发生其他更改的地方(您可以在当前本地和基础之间进行修订!)。这正是最近的修订版本,之后没有其他分支(同一个父级)(在您的案例中为r128)

  • 头是什么
Head是版本控制中的最新版本。如果你只在一个副本上单独工作,它可能是base。但同事可能修改了同一个文件并将其签入版本控制,那么head就比base晚

  • 什么是本地的
Local是您的修改版本(在您的案例中为r133)

  • 其他的是什么
另一个是一些分支/分支,它也将您的基础作为父级(在您的例子中是r134)

  • 3路合并是如何工作的
3路合并(至少在meld中)分层工作。通常是从左到右这样:

本地>基础>其他/头部

local/base基本上是微不足道的,因为它正是您所修改的

然后,您可以将您的更改合并到head修订版或您的同事的修订版或其他版本中


可以有多个其他/head修订,但合并不是你的工作,因此超过3种方式比较没有意义。

你对head的定义对于mercurial来说并不准确。mercurial的最新版本称为“tip”。小费总是头,但头并不总是小费。在合并中,“head”永远不是“base”,因为“base”是正在合并的两个变更集的最新共同祖先。所以你是说很多变更集都是手动合并的?