После нажатия на репозиторий отзывов «abort: не удается перебазировать неизменяемый набор изменений» при перебазировании - PullRequest
23 голосов
/ 21 марта 2012

У нас есть репозиторий для проверки кода, где люди hg push -f разного рода вещи. После завершения проверок мы извлекаем данные из центрального репозитория проекта, перебазируем и отправляем. Я недавно обновился до Mercurial 2.1 и получаю это сообщение:

abort: can't rebase immutable changeset 43ab8134e7af
(see hg help phases for details)

когда я пытаюсь hg pull --rebase из центрального хранилища. Как мне это исправить?

Ответы [ 3 ]

36 голосов
/ 21 марта 2012

В файле .hg / hgrc репозитория обзора добавьте следующие строки:

[phases]
publish = False

Проблема связана с новой функцией в Mercurial 2.1, которая называется phase . Это великолепно. Здесь - хорошее введение в его использование.

Чтобы сделать изменяемые в данный момент наборы изменений изменяемыми, используйте hg phase -f -d REV, чтобы REV снова стал изменяемым. Как только файл hgrc был изменен, вам больше не нужно это делать.

Как примечание: hg push -f хромает. Создайте псевдоним hg review, который добавит -f в этот репозиторий.

3 голосов
/ 01 апреля 2012

Я не думаю, что отключение поддержки фазы на сервере - это правильное решение, но ваша проблема звучит странно.

Pull --rebase должно перебазировать ваши локальные изменения поверх удаленных изменений, которые должны бытьразрешено, даже если фазы поддерживаются клиентом, , если эти изменения не были замечены кем-либо еще , например.они нигде не были вытеснены.

Возможно ли, что вы уже выдвинули свои собственные изменения, куда-то еще (что устанавливало их в публичную фазу), и после этого попытались извлечь из репозитория тестирования?Потому что тогда это правильное поведение, которое вы видите.

В большинстве случаев плохая идея - связываться с фазами вручную (с hg phase -f), потому что это может легко привести к переписыванию истории,что может привести к дублированию наборов изменений или различным ошибкам, когда другие люди пытаются тянуть / толкать.Если набор изменений стал помечен как открытый (как в вашем случае), это, вероятно, произошло по уважительной причине.

0 голосов
/ 08 мая 2014

Я сталкивался с таким поведением при свернутой ребазе. Отказ от проекта не помог мне. Итак, я только что установил (hg pull -u) для синхронизации с удаленным репо, затем просто перенес фиксацию проблемы (hg graft <problem_commit>) и затем исправил этот самый новый коммит.

...