Как 3 способа сливаются в Mercurial/Meld?
Я работаю над проектом, где у меня есть фиксация, в которой появилась функция с серьезными проблемами, которые не были обнаружены сразу. Теперь я хочу полностью удалить эту ревизию, сохраняя при этом работу, следуя за ней, но мне нелегко обернуть голову вокруг этого трехмерного слияния. Вот упрощенный график моего проекта.
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 появится с тремя формами одного из моих файлов: локального, базового и другого. Кажется, что локальный r133, но мне сложно свернуть голову вокруг того, что означает "базовый" и "другой".
Ответы
Ответ 1
Локальный - r133
Другое - r134
База - r128 (общий предок как для r133, так и для r 134)
Когда вы выполняете 3-х мерное слияние, они сравнивают все три из них вместе, чтобы помочь вам решить, что взять и откуда. Увидев, что изменилось в другой редакции и как выглядел общий предк, вы можете сделать гораздо более обоснованное решение о том, что сохранить и что измениться.
Ответ 2
Ваш вопрос действительно запутан, но вот некоторая информация, которая может вам помочь.
База - это немодифицированная версия ревизии, которую вы в настоящее время проверили и сработали. где возможно изменение других изменений (у вас могут быть изменения между вашим текущим местным и базовым!). его как раз там, где ближайшая ревизия, где никакая другая вилка не отвлекалась от потом (тот же самый родитель) (в вашем случае r128)
Head - последняя версия в управлении версиями. если вы работаете в одиночку только на одном экземпляре, это, вероятно, будет основой. но сотрудник-коллега мог бы изменить тот же файл и проверить его на управление версиями, затем голова позже вашей базы.
Локальная - это ваша модифицированная версия (в вашем случае r133)
Другое - это некоторая fork/branch, у которой также есть Base как родительский (в вашем случае r134)
- Как работает трехстороннее слияние?
3 способа слияния (по крайней мере, в сочетании) иерархически. обычно слева направо:
local > base > other/head
local/base в основном тривиально, потому что именно то, что вы изменили
тогда вы можете объединить свои изменения в головную ревизию или с кем-либо из ваших сотрудников или что-то еще.
Может быть несколько других/головок ревизий, но тогда это не ваша работа, чтобы объединиться, и поэтому сравнение более чем на 3 пути не имеет смысла.