Posso annullare un `git clean -fdx`?

Stavo seguendo le istruzioni per creare le pagine github e ho dimenticato di spostarmi nella sottodirectory git. Di conseguenza, ho appena messo a fuoco un’intera directory di documenti con git clean -fdx . C’è un modo per annullare questo terribile errore?

No. Quei file sono spariti.

(Controllato su Linux: git clean chiama unlink() , e non esegue il backup di nulla in anticipo.)

 git clean -fdxn 

Farà una corsa a secco e ti mostrerà quali file verrebbero eliminati se avessi corso

 git clean -fdx 

(ovviamente questo è utile solo se lo sai in anticipo, ma per la prossima volta)

No. “git clean -fdx” cancellerà tutti i file e le directory che git non tiene traccia dalla directory di lavoro. Poiché Git non tiene traccia di questi file, non avrà alcun backup di questi file. Almeno non di solito.

Se hai fatto un ‘git add’ su uno di questi file relativamente recentemente (ma hai interrotto il commit), c’è la possibilità che tu possa trovarlo con ‘git fsck –lost-found’. Vale la pena provarlo, ma non illuderti troppo.

In futuro dovresti considerare piuttosto di commettere alcune volte troppo spesso di poche volte troppo di rado. In questo modo avrai almeno un backup locale, anche se non finisci con il push di questi commit su un telecomando.

IntelliJ / Android Studio consente di ripristinare i file dalla cronologia locale .

Ho avuto questo problema oggi.

Come altri hanno già detto, git non conserva i file.

L’unico modo per annullarlo è con un programma di utilità undelete. Ho usato “extundelete” e ho recuperato tutto, ma il tuo chilometraggio / file system può variare.

Se si sta lavorando su Eclipse, una delle possibili soluzioni è il ripristino dalla cronologia locale di Eclipse.

Come @kusma menzionato sopra, se sei fortunato (se hai mai fatto “git add”), allora puoi usare quanto segue per estrarre l’intero object:

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

In questo modo, cercherà tutti i tipi di blocchi, raccoglierà l’intero diff e aggiungerà a un file che è ansible estrarre il file perso. Nel mio caso, avevo perso un’intera class Java.

In realtà ! Questo è ansible! Ma senza usare i comandi git.
Tutto ciò di cui abbiamo bisogno è solo uno strumento di recupero file come Recuva .
Basta menzionare il percorso da dove è stato cancellato e lasciare che recuperi i file.

Anche qui ci sono alcune note utili per usare quell’app:

  1. Ti consiglio vivamente di selezionare questa casella di controllo prima di ripristinare i file (quando i file eliminati vengono visualizzati nella finestra di ripristino):
    Advanced Mode -> Options -> Actions -> Restore folder structure
    Con questo tutti i tuoi file verranno recuperati mantenendo la struttura delle cartelle, quindi sarà molto più semplice trascinare e rilasciare quella cartella sul percorso da cui è stata cancellata.
  2. Installare lo strumento di ripristino su dispositivo USB è molto preferibile (a causa del seguente avviso)
  3. Mentre si menziona il punto in cui ripristinare i file, evitare di scegliere la stessa unità da dove i file sono stati eliminati (sempre a causa di avvertimenti sottoelencati), poiché il file attualmente ripristinato potrebbe sovrascrivere l’altro file eliminato che non è ancora stato ripristinato. Recuperare i file su qualsiasi unità USB è sempre una buona soluzione lì.

Avvertimento! Non appena si perde (accidentalmente cancella) qualsiasi file, provare a non toccare (aggiungere / modificare file) l’unità da cui è stato cancellato per aumentare la possibilità di ripristino riuscito. Altrimenti potresti perdere completamente quel file.

Perché funziona: quando elimini un file, in realtà non viene eliminato. Viene semplicemente contrassegnato come “cancellato”, quindi la prossima volta che aggiungi / aggiorni i file alla stessa unità, quei vecchi file vengono sovrascritti con quelli nuovi. Ma fino a quando non vengono sovrascritti è ancora ansible leggere (e ovviamente ripristinare) i file.

Fortunatamente, ho commesso questo errore durante l’utilizzo di Windows 7. Sono andato al cestino, ho evidenziato tutti i file cancellati e ho fatto clic su “Ripristina”. Fatto.

Se stai usando git con MSBuild ho creato un target che copia tutti i file e poi git clean -xdf . In questo modo puoi facilmente ripristinare il file se ti accorgi di aver cancellato qualcosa che non volevi eliminare. Dai un’occhiata qui: http://blog.3d-logic.com/2012/11/04/safe-git-clean-with-msbuild/

Se si utilizza un IDE Jetbrains, è disponibile un’opzione per visualizzare la cronologia locale di un file. Nel caso in cui hai fatto git clean , puoi ricreare il file e controllare la cronologia locale del file e ripristinarlo da lì.

Ha funzionato per me per un singolo file. Per una directory completa non ho idea di come farlo.