Как вернуть Mercurial hg pull?
Если вы выполните hg pull
, а затем hg update
(или hg merge
), есть ли способ отменить это? Т.е.: вернуть репозиторий в состояние до выполнения hg pull
?
Я считаю, что вы можете сделать hg update -r n
, где вы должны указать набор изменений до вытягивания как n
. Хотя я предполагаю, что это все равно оставит изменения в вашем репозитории, но это не совсем то, что мы хотим.??
Ответы
Ответ 1
hg strip
удалит ревизии из репозитория. Как и все мощные команды, это опасно, поэтому будьте осторожны.
https://www.mercurial-scm.org/wiki/StripExtension
Также смотрите:
https://www.mercurial-scm.org/wiki/EditingHistory
Если вы поймаете свою ошибку немедленно (или достаточно скоро), вы можете просто использовать hg strip REV, чтобы отменить последние (одно или несколько) изменений....
Ответ 2
Хорошо, вы не можете откат, потому что вы совершили коммит. То, что вы можете сделать, это использовать "hg strip", который является частью mq (после того, как в полосе 2.8 находится собственное расширение), или используйте mq для удаления изменений. В любом случае, я предлагаю вам сделать все на другом клоне, на всякий случай.
Чтобы сделать strip, обновите версию, которую хотите сохранить, а затем
hg strip <REV>
где <REV>
- первая версия, которую вы хотите удалить. Он удалит этот один и все подделки (включая фиксацию слияния).
В качестве альтернативы вы можете
hg qnew (if you don't already have a patch queue)
hg qimport <REV>
который будет импортировать одну ревизию в очередь исправлений. Затем вы можете добавить больше, а затем использовать команды mq для редактирования, переупорядочения, удаления или того, что вы хотите сделать с этими изменениями. qdel
удаляет текущий патч.
Изменить: Очевидно, вам нужно включить расширение MQ для обоих из них, если вы не используете 2.8 или новее. В этом случае полоса находится в расширении полосы, а mq - в расширении mq. Оба поставляются со стандартной установкой.
Ответ 3
hg --rollback
можно использовать для отмены последней транзакции, пока ваша hg pull
все еще самая последняя транзакция, тогда вы можете ее использовать. Однако эта команда должна использоваться с осторожностью. Подробнее см. здесь.
Ответ 4
вы можете:
hg update -C <version>
см. меркурий FAQ.
Ответ 5
Если вы хотите удалить все следы формы вытягивания своей истории, вам нужно использовать расширение, как предлагает Bert F (философия в mercurial - никогда не менять историю)
Если вы не помните историю, содержащую вашу ошибку, у вас есть две слегка отличающиеся опции hg update -C -r
, которые создадут новую ветку в указанной вами версии или hg revert -r
, которая останется на той же ветке, но создаст новое неустановленное изменение, отменяющее все.