Случайно, используя графический интерфейс, а не интерфейс командной строки, я удалил все файлы в проекте Mercurial.
Я восстановился с помощью Revert ok и потерял часть работы, которую, поскольку у меня есть машина времени, я мог легко вернуть. Но есть ли способ удалить / восстановить такие файлы? Перелистал мануал и погуглил, но ничего не видит. Есть плагины?
Я, вероятно, отвечаю на свой вопрос здесь, но файлы исчезли из каталога и не были в корзине для восстановления, поэтому я предполагаю, что удаление невозможно отменить?
ps Я знаю это hg forget
или hg remove -Af
удаляю без удаления из каталога, но мой вопрос связан с ошибкой, которую я сделал, а не с крутым обдумыванием действия.
Ответы:
Сначала используйте
hg grep
для поиска удаленного файла, который хотите восстановить. Вывод этой команды покажет вам последнюю ревизию, для которой существовал файл, и путь к удаленному файлу. Во-вторых, запуститеhg revert -r <revision number> <path to deleted file>
. Удаленный файл теперь будет в вашей рабочей копии, готовый к повторной фиксации в голове.источник
hg log -I '**file.ext'
Цитата из комментария:
В этом случае вам просто нужно обновить рабочий каталог до предыдущей версии:
Обратите внимание на отрицательный номер версии. Если файлы, которые вы удалили, не относятся к предыдущей версии, вы можете найти их, используя:
источник
Хорошо, это сработало для меня.
источник
Для Mercurial 1.6 и выше
Если вы знаете имя удаляемого файла, вы можете легко найти его версию:
Это даст вам ревизию, в которой будет удален файл с именем NAME.c (в корне).
Затем вы можете вернуть файл к предыдущей версии (как и другие ответы):
Вместо этого вы можете использовать шаблон имени файла, чтобы приспособиться к тому, что вы знаете, например, вы можете использовать его
**/NAME.c
для поиска во всех каталогах. Вы можете прочитать об этом в разделе «Шаблоны имен файлов» . И используйте эту ссылку, чтобы узнать о новых спецификациях revset .источник
Дополнение к принятому ответу - это быстрее, если вы хотите отменить все удаления в фиксации. Я удалил большую папку с несколькими сотнями файлов и сделал это
hg addremove
, что вовсе не входило в мои намерения, поэтому мне пришлось отменить все эти удаления.Как быстро найти удаленные файлы в истории репозитория Mercurial? + xargs + tr, вернуть все удаления ревизии -3 к версии с ревизии -4:
Обратите внимание, что это не удастся, если в имени любого из ваших файлов есть пробелы; http://hgbook.red-bean.com/read/customizing-the-output-of-mercurial.html , похоже, не имеет каких-либо шаблонов, где на данный момент
{file_dels}
разделены\n
.источник
Вы можете отменить последнюю фиксацию репо с помощью
hg rollback
. Доступен только один уровень отката, поэтому, если вы выполнили удаление с более чем одной фиксацией, это не отменит полностью ваше изменение. Это работает только в вашем локальном репозитории, поэтому, если вы нажали, вы не сможете отменить его в удаленном репозитории.источник
hg rollback
не будет восстанавливать удаленный файл, потому что удаление файла не является частью транзакции фиксации.Вы можете удалить подтвержденные исправления, используя
hg strip
команды, предоставляемой расширением mq (Mercurial Queues). Это должно вернуть вам ваши файлы.Сделайте резервную копию, прежде чем попробовать это, потому что это изменит базу данных изменений Mercurial.
источник
Приведенный ниже метод прост и настолько глуп, что не может пойти не так. Если вы удалили или переименовали несколько файлов, все будет в порядке.
и теперь вы запускаете mc (или Far Manager) и сравниваете то, что было, с тем, чем стало.
когда это будет сделано, просто удалите
mydirectory1
.источник
Следующее сработало для меня.
(Необязательно, чтобы вернуть все файлы)
источник