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

После нажатия на репозиторий рецензирования "abort: невозможно переустановить неизменяемый набор изменений" на rebase

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

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

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

4b9b3361

Ответ 1

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

[phases]
publish = False

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

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

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

Ответ 2

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

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

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

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

Ответ 3

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