Я сломал некоторый код в своих последних 4-5 ревизиях/пушах в основной репозиторий. Сейчас я хочу полностью удалить эти нажатия и запустить HEAD моего репозитория с этой точки. Как я могу это сделать? В SVN есть команда dump, которая копирует весь репозиторий из одной ревизии в другую. Есть какая-то замена в Mercurial или как-то иначе?
Как вырезать меркуриальный репозиторий из определенной ревизии/пуша
Ответы (2)
Quardas, «полное удаление» не является частью стандартного словаря mercurial. Это система, построенная вокруг неизменной истории. Вы можете отменить то, о чем сожалеете, но вы не удаляете это. Представьте себе ученого в своей лаборатории, который пишет ручкой на пронумерованных страницах бортового журнала — вырывание страницы считается мошенничеством. Есть ценность в сохранении ваших слепых союзников и ошибок хотя бы для того, чтобы вы помнили, что не пытаетесь повторить это снова.
Рассмотрите возможность использования hg backout
, который легко и автоматически добавляет инверсию набора изменений, тем самым полностью отменяя его, но сохраняя запись как набора изменений, так и его отмены.
Если вы действительно не согласны с этой концепцией, попробуйте изучить clone -r
. Это позволяет вам клонировать ваш репозиторий до определенного момента. Например:
hg clone -r -6 myrepo partial-myrepo
mv myrepo myrepo-with-stuff-I-regret
mv partial-myrepo myrepo
это заменит ваше репо новой копией, в которой отсутствуют последние пять наборов изменений.
Есть много других способов сделать то же самое, используя инструменты, которые не являются частью набора инструментов mercurial по умолчанию (расширения, такие как histedit, strip, mercurial queues и т. д.), но вам лучше вообще не удалять историю и делать это без расширений, если вы это сделаете.
Для этого вы можете использовать convertextension.
Хотя я не совсем понимаю почему люди всегда хотят скрыть/удалить в своей истории VCS то, что они допустили ошибку. Это не так критично, пока вы исправляете это в более новой версии...