Как отменить "hg qnew"?
Я выпустил hg qnew
не понимая, что он включает в себя какие-либо выдающиеся изменения в патче. Я хотел бы поддержать это и выбрать только определенные изменения, используя hg qrecord
, Как я могу отменить qnew
?
3 ответа
Ваш ответ определенно работает - с более новыми Mercurial вы можете использовать hg strip --keep
чтобы избежать выполнения шага импорта:
$ hg strip --keep .
$ hg qdelete patch-name
--keep
флаг заставляет стриптиз игнорировать рабочую копию во время работы, то есть удаляет коммит (например, hg qpop
будет делать), но это не отменяет изменения в файлах. После удаления у вас все еще есть патч в вашей серии (не применен), и вы можете удалить его.
Я нашел ответ здесь:
hg qpop
hg import --no-commit .hg/patches/patch-name
hg qdelete patch-name
Пожалуйста, добавьте лучший способ, если вы знаете.
Обновление: на основании ответа Альдо, есть другой способ:
hg qnew test
# We can undo the above qnew as:
hg qrefresh -X '*'
hg qpop -f
hg qdelete test
Если вы просто хотите отменить последние qnew
сохраняя все ваши локальные изменения, один из вариантов:
qcrefresh 123
hg qpop -f
hg qdelete <name of the patch>
Заметить, что 123
это просто случайная строка: вы говорите Mercurial, чтобы включить только (мы надеемся, nonexistsnt) 123
файл в текущем патче. Более новые версии Mercurial При выпуске выдадут предупреждение о факте 123
Файл не существует, но это именно то, что мы хотим здесь.
Если вы хотите сохранить некоторые изменения в текущем пути, вы можете использовать qcrefresh
команда от расширения crecord, которое позволяет графически выбирать изменения, которые будут включены в текущий патч. Вам необходимо скачать его с Bitbucket, распаковать архив и настроить его в .hgrc
:
[extensions]
crecord = <path/to/crecord/package>