Как работает трехстороннее слияние в 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 в основном тривиален, потому что это то, что вы изменили

затем вы можете объединить свои изменения с ревизией руководителя или со своим коллегой или кем-то еще.

Может быть несколько других / головных ревизий, но слияние не является вашей задачей, и поэтому более чем трехстороннее сравнение не имеет смысла.

Другие вопросы по тегам