it-swarm.com.ru

Могу ли я отменить `git clean -fdx`?

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

96
Eric

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

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

103
Mat
git clean -fdxn

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

git clean -fdx

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

40
Peter Ajtai

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

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

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

16
kusma
11
Y2i

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

7
Abhinav

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

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

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

6
dougallj

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

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

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

6
Marcello de Sales

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

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

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

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

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

4
Just Shadow

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

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

1
Rajesh Paul

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

1
Matt Cashatt

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

1
Pawel

Я сделал с кодом, который я должен был добавить в свой репозиторий, и очистил с помощью -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

0
motbus