Hai perso dei file in Git? Recupera quelli cancellati e non sottoposti a commit

Un cambio di ramo fa apparire vuota la cartella di origine. Un hard reset cancella le modifiche apportate stamattina. Oppure un comando di pulizia elimina uno script che non hai mai sottoposto a commit. Questi file persi in Git Le situazioni sembrano simili, ma il metodo di recupero corretto dipende dal fatto che Git abbia mai memorizzato o meno il contenuto mancante.
Il fatto che un file non sia presente nella cartella di lavoro non significa necessariamente che sia stato rimosso dal repository. Un commit, l'area di staging, un altro ramo o uno stash potrebbero ancora contenere una copia utilizzabile. Inizia a controllare queste posizioni prima di eseguire una scansione del disco.
Questa guida segue tale ordine. Se Git non ne possiede una copia e il file originale è scomparso dall'archivio, il Guida al recupero dei file cancellati copre la versione successiva. Per quello specifico scenario di Windows, Magic Data Recovery offre un'opzione di ripristino a livello di archiviazione; non ricostruisce la cronologia di Git.
Indice dei contenuti
File persi in Git: scegli il metodo di recupero giusto
La risposta più breve: ripristina un file tracciato dall'indice o da un commit noto. Controlla il reflog per individuare eventuali commit persi e la cronologia locale per individuare le modifiche che Git non ha mai salvato. Ricorri al recupero da disco solo quando non è rimasta alcuna copia utilizzabile.
Che cosa è successo? | Nel caso in cui ne esista una copia | Inizia da qui |
Hai eliminato un file con il controllo delle versioni senza aver prima preparato l'eliminazione | L'indice di Git | Ripristina il percorso individuale |
Hai simulato la cancellazione oppure hai utilizzato | L'ultimo commit | Ripristina quel percorso da |
Sei stato tu a cancellarlo | Un commit precedente | Trova una revisione che contenga il file |
Un reset, un rebase o una modifica hanno nascosto un commit | Registro locale delle operazioni | Crea un ramo di ripristino a partire dal vecchio commit |
Hai preparato dei contenuti ma non li hai mai pubblicati | Indice degli oggetti blob esistenti | Controlla l'indice, poi esamina gli oggetti |
Non hai mai aggiunto, salvato o messo in stash il contenuto | Cronologia delle modifiche, copie di backup, disco originale | Controllare le copie prima del ripristino del disco |
I file sono scomparsi dopo il cambio di ramo | Un'altra configurazione di filiale o di cassa | Verifica prima la località e la filiale |
Questa distinzione è importante per Git: recupero dei file non sottoposti a commit Ricerche: il termine “uncommitted” comprende sia i contenuti in fase di staging sia le modifiche che Git non ha mai memorizzato. Questi due casi presentano limiti di recupero diversi.
Proteggi il repository prima di eseguire i comandi
Metti in pausa la compilazione, l'installazione delle dipendenze e la pulizia automatica. Se l'unità funziona correttamente, copia il repository su un'altra unità fisica, inclusi i metadati Git nascosti. Un normale clone non conserva tutti gli indizi di ripristino locali, come l'indice, il reflog e gli oggetti non raggiungibili.
Per gli alberi di lavoro collegati o i sottomoduli, .git potrebbe trattarsi di un file di puntatore anziché di una directory. Conservare anche la directory Git a cui fa riferimento. Se si sospetta un guasto fisico del disco, interrompere le normali operazioni di copia e scansione e rivolgersi a un professionista per il recupero dei dati.

Evita di utilizzare questi comandi durante il ripristino:
git reset --hard, che elimina le modifiche di lavoro tracciate e può rimuovere i percorsi non tracciati che ostacolano il processo.git clean -fdogit clean -fdx, che rimuove i contenuti non tracciati;-xinclude anche i file ignorati.git gc --prune=nowegit prune, che potrebbe eliminare oggetti di cui hai ancora bisogno.
Git’s ripristina la documentazione e documentazione chiara spiegare questi effetti. Di solito non è necessario eseguire un rollback dell'intero repository quando manca un solo file.
Utilizza gli esempi riportati di seguito dalla directory principale del repository. Sostituisci i nomi dei file e gli hash di esempio con i tuoi. I comandi di ripristino richiedono Git 2.23 o versioni successive e funzionano in Git Bash su Windows, nonché nei terminali di macOS e Linux.
Verifica se il file è mancante o semplicemente si trova altrove
Prima di tentare Recupero dei file Git, verifica quale repository e quale ramo hai aperto:
- git rev-parse –show-toplevel
git status --shortgit branch --show-currentgit branch --all
Successivamente, effettua una ricerca in Esplora file o nel Finder utilizzando il nome esatto del file, l'estensione e la data di modifica approssimativa. Controlla un altro checkout, una cartella di progetto rinominata, un dispositivo di archiviazione esterno e le cartelle escluse dal tuo editor.
Tre concetti di Git spiegano la maggior parte delle cose file persi in Git casi:
- Albero di lavoro: i file che stai modificando in questo momento.
- Indice: il contenuto che hai selezionato con
git addper il prossimo commit. - Commit: un’istantanea del progetto salvata nella cronologia di Git.
Git non salva automaticamente ogni modifica. Lo staging cattura il contenuto in quel preciso momento, quindi le modifiche successive potrebbero essere presenti solo nel tuo albero di lavoro. Vedi la documentazione di Git guida alla registrazione delle modifiche.
Recuperare i file cancellati in Git prima di eseguire il commit
Ideale per: un file tracciato che hai eliminato localmente, mentre il repository ne conserva ancora il contenuto.
Per prima cosa, controlla il percorso:
git status --short -- src/app.jsgit diff -- src/app.jsgit diff --cached -- src/app.js
In breve, la prima colonna descrive le modifiche all'indice; la seconda descrive le modifiche all'albero di lavoro. D indica una cancellazione non graduale. D indica una delezione graduale.
Ripristinare una cancellazione non provvisoria dall'indice
A recuperare i file cancellati in Git quando l'indice contiene ancora il file:
git restore -- src/app.js
Questo comando ripristina la versione preparata, che potrebbe differire dall'ultimo commit. Ad esempio, se hai preparato una funzione aggiornata prima di eliminare il file, Git può ripristinare quel contenuto preparato. Questo comando non consente invece di recuperare le modifiche successive non preparate.
Ripristinare una cancellazione provvisoria da HEAD
Se hai simulato la cancellazione, l'indice non contiene più il file in quel percorso. Dopo aver salvato eventuali copie utili, ripristina l'ultima versione confermata:
git restore --source=HEAD --staged --worktree -- src/app.js
Questa operazione modifica sia l'indice che il file di lavoro per quel percorso. Non ripristina una versione più recente e non sottoposta a commit. Git’s ripristinare la documentazione spiega le opzioni di origine e destinazione.
Per un file appena aggiunto in un repository in cui non sono presenti commit, TESTA non esiste ancora. Se l'indice contiene ancora il file, utilizzare invece il metodo basato sull'indice.
Ripristinare un file da un commit precedente o da un altro ramo
Ideale per: una cancellazione definitiva, una versione precedente del file o un file mancante solo dal tuo ramo corrente.
Cominciamo dalla sua storia:
git log --all --oneline -- src/app.js
Se non ricordi il percorso precedente, elenca i record di cancellazione:
git log --all --diff-filter=D --summary
Controlla il commit del candidato prima di ripristinare qualsiasi cosa:
- git show abc1234:src/app.js
Sostituire abc1234 con un commit che contenga effettivamente il file. Quindi ripristina solo quel percorso:
git restore --source=abc1234 -- src/app.js
Se abc1234 è il commit di cancellazione; controlla il suo commit padre con git show abc1234^:src/app.js. Nel caso di una semplice eliminazione, il genitore potrebbe contenere la versione desiderata. I commit di unione hanno più genitori, quindi è bene verificare il contenuto invece di dare per scontato che il primo genitore sia corretto.
Per File mancanti in Git dopo il cambio di ramo, controllare la diramazione che contiene il file:
- git show feature/login:src/app.js
git restore --source=feature/login -- src/app.js
Questi esempi mantengono il ramo corrente e gli altri file. Controlla il Documentazione sul log di Git per le ricerche storiche e il Visualizza la documentazione di Git per controllare i contenuti archiviati. Le ricerche nella cronologia potrebbero richiedere il vecchio nome del file nel caso in cui qualcuno lo abbia rinominato.
Utilizza Reflog per recuperare le modifiche perse in Git dopo un reset
Ideale per: lavoro svolto che è scomparso dalla cronologia visibile a seguito di un’operazione di reset, rebase, amend o creazione di un ramo.
Per ripristino dopo un "git reset hard", controlla la cronologia dei riferimenti locali:
- git reflog –date=local
Cerca il commit precedente all'operazione indesiderata. Verifica il suo contenuto, quindi salvalo in un nuovo ramo denominato:
- git show –stat abc1234
git branch recovery-lost-work abc1234
La creazione del ramo non modifica l'albero di lavoro. In seguito potrai esaminare o ripristinare singoli file da esso.
Reflog non registra ogni modifica apportata ai file. Registra i movimenti dei riferimenti. Se il contenuto mancante non è mai stato incluso in un commit, il reflog da solo non è in grado di recuperarlo. Anche le voci e gli oggetti hanno una durata limitata. Git spiega il meccanismo nella sua Documentazione su reflog.
Per file persi in Git dopo aver eliminato un ramo, il Guida ufficiale al recupero dei dati da Git descrive come recuperare i commit sopravvissuti. Una volta individuato un commit utile, conservalo immediatamente.
Verifica i contenuti nascosti e quelli preparati ma non confermati
Recuperare file da uno Stash
Prima di assumere Modifiche perse in Git in modo definitivo, controlla se li hai messi da parte:
- git stash list
- git stash show –include-untracked –name-only ‘stash@{0}’
- git stash show -p –include-untracked ‘stash@{0}’
Scegli lo stash in base al suo contenuto, non solo alla data. In una copia protetta con un albero di lavoro pulito, applica la voce corretta:
- git stash apply ‘stash@{0}’
A differenza di pop, applicare mantiene la voce nell'elenco delle risorse nascoste. Ciò potrebbe causare conflitti, quindi controlla il risultato prima di proseguire.
Una cartella predefinita non include i file non tracciati. Questi ultimi richiedono -u al momento della creazione dello stash; i file ignorati richiedono -a. Consultare il Documentazione su Git stash.
Recuperare i contenuti in fase di elaborazione dagli oggetti sopravvissuti
Per Git: recupero dei file non sottoposti a commit casi in cui hai già eseguito git add, verificare se l'indice contiene ancora il contenuto:
- git ls-files –stage — src/app.js
- git show :src/app.js
Il secondo comando visualizza la versione indicizzata. Il Documentazione di Git ls-files spiega come controllare le voci dell'indice.
Se l'indice è stato sostituito da un reset, potrebbe comunque essere rimasto un blob contenente il contenuto in fase di elaborazione. Opera sulla copia del repository che hai conservato:
- git fsck –full –no-reflogs –unreachable
Per un blob irraggiungibile candidato, controllarne il contenuto:
- git cat-file -p BLOB_HASH
Sostituire BLOB_HASH con un ID oggetto effettivo. Cerca una funzione, un commento o un valore di configurazione caratteristico. I blob contengono il contenuto, non il nome del file originale, quindi l'identificazione potrebbe richiedere del tempo.
Per gli oggetti sospesi, git fsck --lost-found redige materiale di recupero sotto .git/lost-found/. Non garantisce l'esportazione di tutti gli oggetti non raggiungibili né la ricreazione di un albero di directory completo. Vedi Git fsck e Git cat-file.
Esporta un blob confermato in un nuovo file su un'altra unità utilizzando il reindirizzamento dell'output di Git Bash o un metodo di esportazione che preservi i byte. Evita di copiare contenuti binari dall'output del terminale. Questo approccio aiuta a Recupero dei file aggiunti allo staging di Git, ma solo finché gli oggetti in questione rimangono intatti.
Recuperare i file non tracciati tramite la cronologia dell'editor e i backup
Ideale per: file eliminati o modifiche più recenti che Git non ha mai aggiunto, sottoposto a commit o archiviato temporaneamente.
A recuperare i file non tracciati, controlla il tuo editor prima di eseguire la scansione dell'area di archiviazione. In VS Code, apri la tavolozza dei comandi ed esegui:
- Storia locale: trova la voce da ripristinare
Selezionare il file mancante, esaminare le voci disponibili e confrontarne il contenuto. Per un file esistente, la vista “Cronologia” può anche mostrare la cronologia locale. La disponibilità dipende dalle voci salvate, dalle impostazioni e dai tempi di conservazione; non si tratta di una registrazione garantita di ciò che è stato digitato ma non salvato. Microsoft lo documenta nel Guida all'interfaccia utente di VS Code.
Successivamente, controlla il Cestino, gli elementi eliminati nel cloud, la cronologia delle versioni nel cloud e i backup di sistema. I comandi di eliminazione da Terminale potrebbero aggirare il Cestino. Controlla il percorso di archiviazione originale, invece di dare per scontato che tutti i file del progetto fossero presenti all’interno del repository.
Un repository remoto può ripristinare i commit inviati, ma non contiene automaticamente i file locali non tracciati, le modifiche non salvate o gli stash privati. Chiedi ai tuoi colleghi se esistono copie separate nel caso in cui il lavoro mancante sia stato condiviso altrove.
Per git clean recovery, queste copie esterne sono particolarmente importanti: Git non può recuperare contenuti che non ha mai memorizzato solo perché la cancellazione è avvenuta all’interno di un repository.
Quando i file persi in Git richiedono un recupero del disco
Procedere al ripristino dall'archivio solo dopo aver risposto a queste domande:
- La diramazione, l'indice, il commit, lo stash o l'oggetto superstite corretti contengono la versione richiesta?
- È possibile ricavarlo dal tuo editor, dalla cronologia cloud o dal backup?
- Il file in questione non si trova più nella sua posizione di archiviazione originale?
- Il dispositivo rimane stabile e rilevabile?
Se non esiste alcuna copia utilizzabile e il file è davvero andato perso, file persi in Git diventa un problema a livello di disco. Tra gli esempi figurano uno script non tracciato rimosso durante la pulizia, una directory di progetto eliminata o un'unità formattata contenente file di lavoro locali.
Recuperare i file di progetto cancellati con Magic Data Recovery
Magic Data Recovery supporta scenari di recupero in Windows relativi a cancellazioni, formattazioni ed errori del file system. Il suo flusso di lavoro di scansione e filtraggio offre un modo pratico per esaminare i file di progetto recuperabili quando Git non ne conserva alcuna copia.
Supporta Windows 7/8/10/11 e Windows Server
Il vantaggio principale è la portata: Git effettua la ricerca nei propri record, mentre questo strumento esegue la scansione dell'archivio originale. Nel caso di uno script locale o di un archivio di progetto cancellato, ciò lo rende una soluzione più appropriata rispetto all'esecuzione ripetuta dei comandi Git. Il flusso di lavoro visivo di scansione e revisione consente inoltre di verificare gli elementi individuati prima di reinserirli nel progetto.

Segui questi quattro passaggi:
- Installa in tutta sicurezza. Se possibile, installare ed eseguire lo strumento da un’altra unità o da un altro computer. Ridurre al minimo le operazioni di scrittura sul dispositivo interessato.
- Scansiona il volume originale. Seleziona l'unità su cui si trovavano i file mancanti, anche se il tuo checkout attuale si trova altrove.
- Esaminare i candidati. Utilizza i filtri disponibili per nome file, percorso e tipo. Visualizza l'anteprima dei formati supportati; verifica i file di origine in un editor dopo l'esportazione.
- Riprenditi altrove. Salvare i file selezionati su un'unità fisica diversa e lasciare inalterato il repository originale fino alla verifica.
Il recupero potrebbe restituire versioni precedenti, file incompleti o nomi modificati. Lo strumento non è in grado di ricreare codice non salvato, ricostruire relazioni di commit mancanti né ripristinare automaticamente le dipendenze. La sua utilità in questo contesto deriva dal fatto che interviene in caso di effettiva perdita di dati, quando le opzioni di recupero native falliscono.
Verificare i file recuperati prima di reinserirli nel progetto
Per Recupero dei file persi in Git, il successo significa contenuti utilizzabili, non solo un nome di file tra i risultati di una scansione.
Apri i file sorgente recuperati in una cartella separata. Verifica le funzioni importanti, la codifica, i caratteri di fine riga e se le ultime modifiche sono effettivamente presenti. Le dimensioni dei file e i timestamp forniscono alcuni indizi, ma non garantiscono che tu abbia trovato la versione corretta.
Confronta il candidato con il progetto attuale. Copia solo i file verificati in un checkout di lavoro protetto, esamina git diff, quindi eseguire la build o i test pertinenti. Verificare separatamente i file di configurazione e le risorse esterne.
Infine, salva le modifiche ripristinate su un ramo di ripristino. Evita di sostituire un intero .git directory con metadati parzialmente recuperati; recuperare separatamente il contenuto originale se l'integrità del repository rimane incerta.
Se il ripristino non va a buon fine, controllare la limitazione
Una scansione più approfondita non è in grado di recuperare i contenuti sovrascritti. Anche la funzione TRIM degli SSD e la successiva pulizia del dispositivo possono rendere i dati cancellati non più accessibili. Microsoft’s Guida al recupero dei file di Windows consiglia di ridurre l'uso dell'unità e di salvare i dati recuperati su un'unità separata.
Se il dispositivo si disconnette ripetutamente, emette rumori insoliti o genera errori di lettura, interrompere le scansioni ripetute. Per garantire il corretto funzionamento del dispositivo, ricontrollare il volume originale e eventuali backup esterni prima di provare altri software.
Alcuni File mancanti in Git È necessaria una spiegazione diversa. Il checkout "sparse" esclude intenzionalmente alcuni percorsi tracciati dall'albero di lavoro, mentre i sottomoduli mantengono contenuti separati nel repository. Controlla tali configurazioni prima di considerare una cartella vuota come eliminata. La documentazione di Git checkout parziale e inizializzazione del sottomodulo.
Prevenire la perdita di file in Git nei lavori futuri
Salva le tappe fondamentali e invia i rami importanti a un repository remoto. Prima di ripulire un'area di lavoro, visualizza in anteprima i percorsi interessati con git clean -nd; se intendi includere i file ignorati, controlla git clean -ndx anche.
Mantieni attiva la cronologia locale dell'editor ed esegui il backup dell'intera cartella del progetto. Includi le risorse non tracciate e gli asset esterni che un repository remoto Git non può sostituire. Verifica .gitignore Attenzione: se si ignora un file importante, non ne verrà creato un backup.
Prima di eseguire un reset o un rebase, salva il lavoro in corso e verifica cosa include effettivamente il tuo backup o lo stash. Una breve verifica ora può farti risparmiare ore di ricostruzione in seguito.
Conclusione: abbinare i file persi in Git alla copia ancora esistente
Il migliore file persi in Git La soluzione dipende da dove sia conservata la versione mancante. Utilizza l'indice o un commit per i file tenuti sotto controllo, il reflog per i commit persi e la cronologia dell'editor o i backup per i contenuti che Git non ha mai memorizzato.
Se tali verifiche confermassero un’effettiva perdita di dati, Magic Data Recovery è un'opzione valida per Windows perché risolve i problemi legati alla cancellazione, alla formattazione e agli errori del file system che vanno oltre i dati registrati da Git. Segui le istruzioni Guida al recupero dei file cancellati, salvare i candidati altrove e verificare il codice prima di reinserirlo nel progetto.
Supporta Windows 7/8/10/11 e Windows Server
Domande frequenti
1. Git è in grado di recuperare i file che non sono mai stati sottoposti a commit?
git add oppure salvata in un archivio. Se Git non ha mai memorizzato la versione mancante, controlla la cronologia locale dell'editor, i backup e le copie su cloud. Il recupero dal disco può essere d'aiuto dopo una cancellazione effettiva, ma non è in grado di ricostruire il codice che esisteva solo in memoria.2. Come posso recuperare un file cancellato senza dover ripristinare tutte le impostazioni?
git restore -- percorso/del/file. Se hai simulato la cancellazione, ripristina il percorso da TESTA con --staged --worktree. Per un'eliminazione definitiva, individuare una revisione precedente che contenga il file e ripristinare solo quel percorso. Conservare i contenuti più recenti prima di sostituire qualsiasi cosa.3. Il reflog di Git consente di recuperare le modifiche non salvate?
4. È possibile recuperare i file dopo aver eseguito il comando `git clean -fd`?
5. Perché git pull indica che il sistema è aggiornato anche se mancano dei file?
git status e ripristina le eliminazioni tracciate dalla fonte appropriata. Controlla inoltre il tuo ramo corrente, le impostazioni di "sparse-checkout" e verifica se la cartella mancante appartiene a un sottomodulo.6. Dove salva Git i file persi e ritrovati?
git fsck --lost-found scrive oggetti di ripristino sospesi sotto .git/lost-found/commit/ o .git/lost-found/other/. Le voci "blob" contengono il contenuto dei file, ma solitamente non riportano i nomi dei file originali. Nei worktree collegati, individuare la directory dei metadati Git effettiva prima di cercare queste cartelle.7. Magic Data Recovery è in grado di ripristinare l'intero repository Git?
8. Il ripristino di una versione precedente di Git mi permette di recuperare le mie ultime modifiche?
Jason è uno specialista nel recupero dati e nell’assistenza tecnica con oltre 15 anni di esperienza sul campo. Ha lavorato a lungo a stretto contatto con gli utenti finali, risolvendo casi complessi di perdita di dati e fornendo soluzioni pratiche di recupero in caso di cancellazione accidentale, unità formattate, file system danneggiati, partizioni perse, guasti di sistema e altre emergenze di recupero. La sua competenza comprende anche il backup e il ripristino, la riparazione dei file e il ripristino di emergenza, con particolare attenzione a fornire indicazioni sicure, affidabili e tecnicamente accurate.
