Как отменить "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>
Другие вопросы по тегам