2013-01-23 8 views
14

Sul mio computer locale ho rimosso i file dalla cartella.Ripristina i file di gestione temporanea ma non impegnati dopo 'git rm -rf'

git init 
git add --all 

Poi ho scritto (non chiedetemi perché! :))

git rm -rf 

non commetto, ancora. Ora ho cartelle vuote nel mio progetto. Nella cartella .git ha objects con 53 Mb di file.

Come posso recuperare i miei file? Ho provato programmi come Drill Disc e Stellar, ma non ho trovato i miei file. E non posso effettuare il rollback da GIT.

Come posso recuperare i file persi?

+0

Se non riesci a riaverli utilizzando uno strumento "Undelete", sono spariti. – Sven

+2

http://stackoverflow.com/questions/5788037/recover-from-git-reset-hard/6780036#6780036 questo può essere utile – pktangyue

risposta

10

(aggiornamento) Usa git fsck invece, si tratta di un comando integrato per il recupero di file che sono stati una volta aggiunti al repository git.

git fsck --lost-found --unreachable 

dopo l'elaborazione dei comandi, i file recuperati verranno messi a .git/lost-found/other, con il nome del file di un hash sha256. Anche se il nome originale è ancora perso, il contenuto tornerà.


È possibile trovare i file nella directory .git/objects.

Supponiamo che ci sia un oggetto .git/objects/2f/ae996f8f8f9298b41ba4fdbac3d62014f9579e, è possibile eseguire

git cat-file -p 2fae996 

per ottenere il contenuto del file perso.

Ma mi dispiace, non ho idea di come ricostruire la directory o di farlo automaticamente.

+0

+1: Wow, davvero. Strano che i file ci siano ma non sono accessibili in alcun modo usando i normali comandi git. –

+0

Non mi preoccupo delle directory, ma ho bisogno di file. "git cat-file" - questo come il comando "cat" in * nix? Come posso salvare il file in un'altra directory? – user2003024

+0

è possibile salvarlo tramite il reindirizzamento proprio come un normale comando unix. 'git cat-file object>/path/to/where/you/want/save/it', ma penso che non sia una buona idea perché non ci sono informazioni sui nomi dei file. – dyng

1

Hai provato:

git reset --hard 

?

Speranza che funziona :)

+0

Dopo un 'git rm -rf', è anche possibile eseguire in modo sicuro un hard reset. – Flavius

+1

-1: Funzionerebbe solo se sarebbe stato usato 'rm -rf'. Vedi [la mia risposta] (http://stackoverflow.com/a/14475121/572644) per una spiegazione. –

+1

Questo comando ha cambiato il codice all'ultimo commit e rimuove tutti i file modificati. –