Как удалить определенные наборы изменений из определенного клона Mercurial?
У меня есть клон центрального репо при обороте 2048. Я хочу удалить последние 10 наборов изменений в своем локальном репо, как если бы я вернулся вовремя две недели назад. Я предполагаю, что могу удалить локальное репо и сделать "hg clone -rev 2038"
, но это будет долго (клонирование репо занимает несколько минут). Есть ли способ просто "снять" некоторые изменения?
Примечания:
- Я не пытаюсь отменить изменения. Я в конце концов вытащу эти изменения снова из центрального репо.
- Я не пытаюсь обновить рабочий каталог до более ранней версии; Я действительно хочу повлиять на репозиторий.
- У меня нет исходящих изменений или ожидающих изменений в моем текущем репо и рабочем каталоге.
Ответы
Ответ 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).
Раньше здесь была информация о Стрипе, но теперь ее можно найти здесь.