Могу ли я восстановить удаленные файлы (отменить "git clean -fdx")?

Я следовал инструкциям по созданию страниц github и забыл перейти в свой подкаталог git. В результате я просто уничтожил весь каталог документов с помощью git clean -fdx.
Могу ли я исправить эту ужасную ошибку?

Ответ 1

Нет. Эти файлы исчезли.

(Только что проверено на Linux: git clean calls unlink() и не делает ничего заранее заранее.)

Ответ 2

git clean -fdxn

Будет выполнять сухой запуск и покажет вам, какие файлы будут удалены, если вы запустили

git clean -fdx

(конечно, это полезно, только если вы это знаете заранее, но в следующий раз)

Ответ 3

Нет. "git clean -fdx" удалит все файлы и каталоги, которые git не отслеживает из вашего рабочего каталога. Поскольку git не отслеживает эти файлы, у него не будет резервных копий этих файлов. По крайней мере, обычно.

Если вы сделали "git add" в одном из этих файлов относительно недавно (но прервали фиксацию), есть шанс, что вы можете найти его с помощью "git fsck -lost-found". Это стоит попробовать, но не слишком сильно рассчитывайте.

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

Ответ 5

Если вы работаете над Eclipse, одним из возможных решений является восстановление из локальной истории Eclipse.

Ответ 6

У меня была эта проблема сегодня.

Как говорили другие, git не сохраняет файлы.

Единственный способ отменить это - утилита undelete. Я использовал "extundelete" и восстановил все, но ваш пробег/файловая система может отличаться.

Ответ 7

Как упоминалось выше @kusma, если вы повезло (если вы когда-либо делали "git add" ), вы можете использовать следующее для извлечения всего объекта:

git fsck | awk '{print $3}' | xargs git show | tee searchresults.log

Таким образом, он будет искать все типы блоков, собирать весь diff и добавлять в файл, который вы можете извлечь потерянный файл. В моем случае я потерял целый класс Java.

Ответ 8

Фактически Да! Это возможно! Но без использования команд git.
Все, что нам нужно, это просто инструмент восстановления файлов, например Recuva.
Просто укажите путь, откуда он был удален, и пусть он восстанавливает файлы.

Также приведены некоторые полезные примечания для использования этого приложения:

  • Я настоятельно рекомендую вам установить этот флажок перед восстановлением файлы (когда удаленные файлы появляются в окне восстановления):
    Advanced ModeOptionsActionsRestore folder structure
    При этом все ваши файлы будут восстановлены путем сохранения папки так что тогда будет намного проще просто перетащить эту путь к папке, откуда он был удален.
  • Установить средство восстановления на устройстве USB намного предпочтительнее (из-за предупреждения ниже)
  • При упоминании, где восстанавливать файлы, избегать, выбирая тот же диск, из которого удаляются файлы (опять же из-за упомянутого ниже предупреждения), поскольку в настоящее время восстановленный файл может перезаписать другой удаленный файл, который еще не восстановлен. Восстановление файлов на любом USB-накопителе всегда является хорошим решением.

Предупреждение! Как только вы потеряете (случайно удалили) любой файл, постарайтесь не касаться (добавлять/редактировать файлы) диск с того места, где он был удален, чтобы увеличить вероятность успешного восстановления. В противном случае вы можете полностью потерять этот файл.

Почему это работает: Когда вы удаляете файл, на самом деле он не удаляется. Он просто помечен как "удаленный", поэтому в следующий раз, когда вы добавляете/обновляете файлы на один и тот же диск, эти старые файлы перезаписываются новыми. Но до тех пор, пока они не будут перезаписаны, все еще можно читать (и, конечно, восстанавливать) файлы.

Ответ 9

Если вы используете git с MSBuild, я создал цель, которая копирует все файлы, а затем git clean -xdf. Таким образом, вы можете легко восстановить файл, если поймете, что вы удалили то, что вы не хотели удалять. Посмотрите здесь: http://blog.3d-logic.com/2012/11/04/safe-git-clean-with-msbuild/

Ответ 10

Если вы используете любую интегрированную среду разработки Jetbrains, вы можете просмотреть локальную историю файла. Если вы сделали git clean, вы можете воссоздать файл, проверить локальную историю файла и восстановить его оттуда.

Работал на меня за один файл. Для полного каталога я понятия не имею, как это сделать.

Ответ 11

К счастью, я допустил эту ошибку при использовании Windows 7. Пошел в корзину, выделил все удаленные файлы и нажал "Восстановить". Готово.

Ответ 12

Я сделал с кодом, который должен был добавить в свой репозиторий, и очистил с помощью -dfx, я смог восстановить файлы.

Я пытался использовать debugfs, искать и ссылаться на inodes, testdisk и многие другие инструменты, которые появляются, и ни один из них не нашел каталог, который этот глупый текст был удален случайно.

Загрузите extundelete с sourceforge.
Вам, вероятно, потребуется установить пакет e2fslibs-dev
Бежать

$ ./configure 
$ make 

Это сгенерирует двоичный файл для extundelete внутри папки src. В моем случае, я неправильно стер папку. давай называть это FOOBAR

Я только что побежал:

$  sudo ./extundelete --restore-directory <full path to FOOBAR > <the partition> 


и он создал папку с именем RESTORED_FOLDERS