Mercurial/Meld 中的 3 路合并如何工作?
-
27-09-2019 - |
题
我正在开发一个项目,其中我有一个提交,该提交引入了一个具有重大问题但尚未立即发现的功能。现在我想完全删除该修订版,同时保持后续工作,但我很难理解这个 3 路合并。这是我的项目的简化图。
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)
如果我理解正确的话,r127 和 r134 是完全相同的。当我 hg up -C -r 133
然后运行 hg merge
, ,Meld 会弹出我的文件之一的三种形式:本地、基地和其他。local 似乎是 r133,但我很难理解“基础”和“其他”的含义。
解决方案
本地强>为R133
其他强>为R134
<强>基强>是R128(共同祖先两者R133和r 134)
当您执行3路合并它所有这三个一起进行比较,以帮助您决定采取什么以及从何处。通过看到的变化是在其他修订和什么共同的祖先看起来就像你能做出什么,保持什么来改变一个更明智的决定。
其他提示
你的问题确实令人困惑,但这里有一些信息可能对你有帮助。
- 什么是基础?
基础版本是您当前签出并处理的修订版的未修改版本。可能有其他更改已经分叉(您可以在当前本地和基础之间进行修订!)。它只是最近的修订版,之后没有其他分支(同一父级)(在您的情况下为 r128)
- 什么是头?
Head 是版本控制的最新版本。如果你只单独完成一份副本,那么它可能会是基础的。但是同事可能修改了同一个文件并将其签入版本控制,那么 head 就会晚于你的 base。
- 什么是本地的?
Local 是您的修改版本(在您的情况下为 r133)
- 什么是其他?
其他是一些分叉/分支,也将您的 Base 作为父级(在您的情况下为 r134)
- 三向合并如何工作?
三路合并按层次结构工作(至少在融合中)。通常从左到右是这样的:
本地>基础>其他/头
local/base 大部分都是微不足道的,因为它只是您修改的内容
然后你可以将你的更改合并到头部修订版或你的同事的修订版或其他版本中。
可能有多个其他/头部修订,但是合并并不是您的工作,因此超过 3 种方式的比较没有意义。