Подтвердить что ты не робот

Mercurial - "слить", оставив один набор изменений

У меня две головы, позволь назвать их "А" (хорошая голова) и "В" (плохая голова). Я хочу объединить их, взяв все от A и ничего от B. В принципе, мое слияние A и B есть A.

Когда я пытаюсь hg merge, он начинает спрашивать меня об этом файле, и это неизбежно приводит к неприятностям. Я не хочу этого! Как я могу сказать это, чтобы объединить их и в конечном итоге с A, желательно без каких-либо промежуточных шагов?

4b9b3361

Ответ 1

Одна вещь, с которой я столкнулся, и начал использовать недавно в некоторых личных репозиториях, просто использовал переключатель с закрытой веткой с фиксацией. например.

$ hg update B
$ hg commit --close-branch -m "Abandoning branch"

В моих рассуждениях, если вы дуете одну ветвь в пользу другого целиком, это просто не слияние, и глупо это называть. Я относительно новичок в hg, и, похоже, я вспоминаю, что с самого начала не было закрытой ветки, и, возможно, именно поэтому у нее нет такой тяги, как обычные смены, которые я обычно вижу.

Ответ 2

Из рекомендаций Mercurial в разделе 22. Храните файлы "Мой" или "Их" при слиянии.

Иногда вы хотите объединить две головы, но вы хотите выбросить все изменения с одной из головок, так называемое фиктивное слияние. Вы можете переопределить слияние с помощью записи конфигурации ui.merge:

$ hg --config ui.merge=internal:local merge  #keep my files
$ hg --config ui.merge=internal:other merge  #keep their files

Здесь локальный означает родительский рабочий каталог, другой - это голова, с которой вы хотите объединиться. Это оставит обновления с другой головы.

Чтобы слить X в текущую версию, не допуская ни одного из изменений из X, выполните:

hg --config ui.merge=internal:fail merge X
hg revert --all --rev .

Другой подход упоминается в: https://www.mercurial-scm.org/wiki/PruningDeadBranches

$ hg update -C tip # jump to one head
$ hg merge otherhead # merge in the other head
$ hg revert -a -r tip # undo all the changes from the merge
$ hg commit -m "eliminate other head" # create new tip identical to the old