После пуша в репозиторий комментарий, "аборт: не могу перебазировать неизменных изменений" о перебазировании
У нас есть хранилище обзора кода, где люди hg push -f
все виды вещей. После завершения проверки мы извлекаем данные из центрального репозитория проекта, перебазируем и нажимаем. Недавно я обновился до mercurial 2.1 и получил следующее сообщение:
abort: can't rebase immutable changeset 43ab8134e7af
(see hg help phases for details)
Когда я пытаюсь hg pull --rebase
из центрального хранилища. Как мне это исправить?
3 ответа:
В репозитории обзора.файл hg/hgrc, добавьте следующие строки:
[phases] publish = False
Проблема связана с новой особенностью в mercurial 2.1, называемойфазами . Это здорово. Здесь - хорошее введение в его использование.
Чтобы сделать рассматриваемые наборы изменений изменяемыми прямо сейчас, используйте
hg phase -f -d REV
, чтобы заставить REV снова изменяться. После того, как файл hgrc был изменен, вам больше не придется этого делать.В качестве примечания,
hg push -f
хромает. Сделайте псевдонимhg review
, который толкает с помощью-f
к это хранилище.
Я не думаю, что отключение поддержки фазы на сервере является правильным решением, но ваша проблема звучит странно.
Pull --rebase
следует перебазировать ваши локальные изменения, поверх удаленных изменений, которые должны быть разрешены, даже если фазы поддерживаются клиентом, до тех пор, пока эти изменения не были замечены кем-либо другим, например. их никуда не выталкивали.Возможно ли, что вы уже протолкнули свои собственные изменения куда-то еще (что привело их к публичная фаза), а после этого попробовали вытащить из тестового РЕПО? Потому что тогда это правильное поведение, которое вы видите.
Большую часть времени это плохая идея, чтобы возиться с фазами вручную (сhg phase -f
), потому что это может легко привести к переписыванию истории, что может привести к дублированию наборов изменений или различных ошибок, когда другие люди пытаются тянуть/толкать. Если набор изменений был помечен как общедоступный (как в вашем случае), это, вероятно, произошло по уважительной причине.