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

Как удалить определенные наборы изменений из определенного клона Mercurial?

У меня есть клон центрального репо при обороте 2048. Я хочу удалить последние 10 наборов изменений в своем локальном репо, как если бы я вернулся вовремя две недели назад. Я предполагаю, что могу удалить локальное репо и сделать "hg clone -rev 2038", но это будет долго (клонирование репо занимает несколько минут). Есть ли способ просто "снять" некоторые изменения?

Примечания:

  • Я не пытаюсь отменить изменения. Я в конце концов вытащу эти изменения снова из центрального репо.
  • Я не пытаюсь обновить рабочий каталог до более ранней версии; Я действительно хочу повлиять на репозиторий.
  • У меня нет исходящих изменений или ожидающих изменений в моем текущем репо и рабочем каталоге.
4b9b3361

Ответ 1

Используйте команду strip:

hg strip -r 2039

Эта команда предоставляется StripExtension. Он распространяется как часть Mercurial 2.8 и более поздних версий, но вам нужно сначала включить его, добавив следующие строки в ваш.hgrc или Mercurial.ini:

[extensions]
strip =

До Mercurial 2.8 он был частью MqExtension.

Чтобы предотвратить случайное уничтожение истории, команда сгенерирует резервный пакет в .hg/strip-backup/ который вы можете при необходимости снова .hg/strip-backup/ hg unbundle.

Ответ 2

Клонирование локального репо должно быть быстрым. Я предполагаю, что "несколько минут" относится к удаленному репо?

Вы можете использовать hg clone <local repo> <new repo> -r <revision> только для клонирования до определенной версии.

Ответ 3

Чтобы удалить набор изменений, который уже был установлен и нажат, используйте:

 hg backout -r (changeset number)

Чтобы удалить набор изменений, который был зафиксирован, но не нажат, используйте:

  hg strip -r (changeset number)

Ответ 4

Для версий, предшествующих Mercurial 2.8, Strip был частью MqExtension.
В случае, если вам нужно включить старые расширения MQ, вы можете сделать это, добавив это:

[extensions]

hgext.mq =

в ваш файл ~/.hgrc (или mercurial.ini).

Раньше здесь была информация о Стрипе, но теперь ее можно найти здесь.