Отменить случайную полосу hg?

Я случайно запустил hg strip и удалил стопку коммитов. С тех пор я ничего не делал в репо. Есть ли способ для меня вернуть этот кусок коммитов, чтобы отменить hg-полосу, которую я только что побежал?

Ответ 1

Пока вы не запускаете полосу с опцией --no-backup, разделенные наборы изменений можно найти в репозитории под .hg\strip-backup. Если вы сортируете содержимое каталога по дате, то последнее, вероятно, является тем, которое вам нужно восстановить. Восстановите его с помощью hg unbundle <filename>.

Ответ 2

В качестве альтернативы использованию hg unbundle можно использовать hg pull из файла резервной копии.

Как отмечено в комментарии к другому ответу на этот вопрос, hg unbundle имеет меньше опций и работает только с пакетами, но может развязывать более одного пакета за раз. Принимая во внимание, что hg pull может извлекать данные из одного источника (share/web/bundle) и имеет другие параметры.

Вот пример использования hg pull на основе внешнего поста Исаака Хурадо:

Обычно резервная копия помещается в REPO/.hg/strip-backup/. Увидеть пример ниже:

 $ hg glog
 @  changeset:   2:d9f98bd00d5b tip
 |               three
 o  changeset:   1:e1634a4bde50
 |               two
 o  changeset:   0:eb14457d75fa
                 one
 $ hg strip 1
 1 files updated, 0 files merged, 0 files removed, 0 files unresolved

 saved backup bundle to
 /Users/hchapman/ttt/.hg/strip-backup/e1634a4bde50-backup.hg

А затем, что можно сделать, чтобы восстановить эти наборы изменений:

$ hg pull $(hg root)/.hg/strip-backup/e1634a4bde50-backup.hg

Ответ 3

Вот рабочий пример unbundle из внешнего поста. Я немного почистил его, чтобы сделать его немного более общим:

Восстановление удаленных файлов при использовании Mercurial

Если вы случайно удалили патч и у вас нет резервной копии для него, вы все еще можете восстановить ваши файлы с помощью Mercurial. Чтобы восстановить ваши файлы:

Откройте окно командной строки Microsoft Windows.

Перейдите в папку проекта, в которую вы удалили файлы.

Запустите команду dir

Перейдите в папку .hg, где Mercurial хранит все соответствующие проекты. файлы.

Run the dir command again.

Перейдите в папку Strip-Backup, где Mercurial хранит резервную копию. связки с раздетыми пятнами.

Запустите команду dir еще раз. Несколько файлов отображаются в каталоге которые используют формат <hash>-hg. Они являются резервными пакетами раздетых пластыри.

enter image description here

Используйте проводник Windows, чтобы найти нужный файл. Откройте strip-backup папку в проводнике Windows и сортировку по дате изменения по убыванию. Если необходимый резервный комплект уже известен, [рекомендуется восстановить расслоения в обратном хронологическом порядке, начиная из самой последней связки.

enter image description here

Вернитесь в папку проекта.

Чтобы восстановить пакет, запустите hg unbundle .hg\strip-backup\<bundle_file_name>.... Вы можете добавить его в PATH переменная окружения, чтобы сделать ее доступной глобально.

enter image description here

Синхронизируйте проект [используя hg pull], чтобы увидеть восстановленный патч. Если восстановленный патч не нужен, затем продолжайте восстанавливать исправления в обратном хронологическом порядке до тех пор, пока извлекаться.

Примечание. Вы можете восстанавливать резервные пакеты в любом порядке вместо используя обратный хронологический порядок. Тем не менее, это может быть небезопасно делать так. Вы можете попытаться восстановить резервный пакет, который имеет зависимость от другого резервного пакета, который не был восстановлен. В В этом случае вы получите ошибку.

enter image description here