Как вернуть 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, которая останется на той же ветке, но создаст новое неустановленное изменение, отменяющее все.