Могу ли я восстановить удаленные файлы (отменить `git clean -fdx`)? - PullRequest
103 голосов
/ 07 июня 2011

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

Ответы [ 12 ]

112 голосов
/ 07 июня 2011

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

(Только что проверил в Linux: Git Clean Call unlink(), и ничего не резервирует заранее.)

42 голосов
/ 11 января 2013
git clean -fdxn

Выполнит пробный запуск и покажет, какие файлы будут удалены, если вы запустите

git clean -fdx

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

17 голосов
/ 07 июня 2011

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

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

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

13 голосов
/ 27 декабря 2016
7 голосов
/ 18 ноября 2014

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

7 голосов
/ 09 ноября 2013

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

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

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

6 голосов
/ 11 июня 2011

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

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

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

5 голосов
/ 17 марта 2017

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

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

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

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

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

3 голосов
/ 25 июня 2018

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

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

1 голос
/ 05 ноября 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...