После нажатия на репозиторий рецензирования "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
из центрального репозитория. Как это исправить?
Ответы
Ответ 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>
), а затем изменил эту очень новую фиксацию.