Как работает трехстороннее слияние в Mercurial/Meld?
Я работаю над проектом, в котором у меня есть коммит, в котором появилась функция с серьезными проблемами, которые не были обнаружены сразу. Теперь я хочу полностью удалить эту ревизию, продолжая работу после нее, но мне тяжело обернуть голову вокруг этого трехстороннего слияния. Вот упрощенный график моего проекта.
o changeset: 134: 7f81764aa03a | тег: совет | родитель: 128:451d8a19edea | резюме: Отменена ревизия 451d8a19edea | | @ changeset: 133:5eefa40e2a29 | | резюме: (изменения мне нужно сохранить) | | * Снип 3 коммитов * | o changeset: 129:5f6182a97d40 |/ summary: (изменения, которые мне нужно сохранить) | o changeset: 128:451d8a19edea | резюме: (изменения, которые привели к серьезной проблеме) | o changeset: 127:4f26dc55455d | резюме: (резюме не имеет значения для этого вопроса)
Если я правильно понимаю, r127 и r134 абсолютно одинаковы. Когда я hg up -C -r 133
а потом беги hg merge
У меня появляется Мелд с тремя формами одного из моих файлов: локальным, базовым и другим. local, кажется, r133, но мне трудно обернуть голову вокруг того, что означают "base" и "other".
2 ответа
Местный номер r133
Другое это r134
База r128 (общий предок r133 и r 134)
Когда вы выполняете трехстороннее слияние, сравниваются все три из них, чтобы помочь вам решить, что взять и откуда. Увидев, что изменилось в другой ревизии и как выглядел общий предок, вы сможете принять гораздо более осознанное решение о том, что сохранить и что изменить.
Ваш вопрос действительно сбивает с толку, но вот некоторая информация, которая может вам помочь.
- Что такое база?
Base - это неизмененная версия ревизии, которую вы в настоящее время извлекли и работали над ней. где, возможно, другие изменения были отменены (вы можете иметь изменения между вашим текущим локальным и базовым!). это как раз то место, где ближайшая ревизия, где ни один другой форк не отклонился от потом (тот же родитель) (в вашем случае r128)
- Что такое голова?
Head - это последняя версия системы контроля версий. если вы работаете в одиночку только с одной копией, она, вероятно, будет базовой. но сотрудник мог изменить тот же файл и проверить его в системе управления версиями, тогда заголовок будет позже, чем ваша база.
- Что такое местное?
Local - ваша модифицированная версия (в вашем случае r133)
- Что другое?
Другой - это некий ветвь / ветвь, у которого также есть Base в качестве родителя (в вашем случае r134)
- Как работает трехстороннее слияние?
3 способа слияния работают (по крайней мере, в объединении) иерархически. обычно слева направо так:
местный> база> другой / руководитель
local / base в основном тривиален, потому что это то, что вы изменили
затем вы можете объединить свои изменения с ревизией руководителя или со своим коллегой или кем-то еще.
Может быть несколько других / головных ревизий, но слияние не является вашей задачей, и поэтому более чем трехстороннее сравнение не имеет смысла.