Annullare git reset --hard con il reflog
I blocchi sono casi diversi, non un unico script. Scegli il caso del tuo repository. Sostituisci branch, percorsi e VERIFIED_COMMIT prima dell’uso. I comandi di annullamento valgono solo per la propria operazione attiva; non eseguire entrambe le alternative.
Risposta breve
Dopo git reset --hard, cerca il commit precedente nel reflog, verificalo e crea un branch di recupero. L’oggetto del commit deve essere ancora conservato.
Esempio e condizioni
Questo percorso recupera lavoro già salvato in commit. Il reflog non conserva modifiche presenti soltanto nella directory di lavoro.
Controlla prima di modificare
Evita altri reset, rebase e cambi di branch. Leggi git reflog e controlla git show prima di spostare riferimenti.
git status --short
git reflog --date=iso
git show VERIFIED_COMMITConserva un riferimento o checkout separato
Crea rescue/lost-work su VERIFIED_COMMIT. Il commit ottiene un nome senza cambiare il branch attuale né sovrascrivere i file di lavoro.
git branch rescue/lost-work VERIFIED_COMMIT
git log -5 --oneline rescue/lost-workPrimo percorso
Esamina cronologia e patch del branch recuperato. Puoi rivederlo in un altro checkout o integrare consapevolmente le modifiche necessarie.
Scegli consapevolmente l’altro risultato
Un reset diretto al commit recuperato cambia nuovamente branch, indice e file. Conserva prima le modifiche attuali e un riferimento di recupero.
Limiti ed eccezioni
HEAD@{1} indica una posizione del reflog, non garantisce il commit giusto. ORIG_HEAD può contenere la punta precedente, ma altre operazioni possono sostituirlo.
Conflitti e pulizia
Scadenza del reflog e potatura degli oggetti hanno politiche configurabili separate. Una vecchia voce non ricostruisce un oggetto già eliminato.
Verifica il risultato
Controlla commit, file e cronologia del branch di recupero. Esegui i test pertinenti prima di integrare le modifiche.
git show --stat rescue/lost-work
git status --shortDomande frequenti
git revert crea un commit inverso e non riporta il branch alla posizione precedente. Per contenuti solo preparati, git fsck può trovare blob, senza garantire nomi o struttura.
Esamina l’operazione in FluxGit
FluxGit riunisce movimenti del reflog e punti di ripristino nella Safety Timeline. Con funzione attiva e modifiche locali rilevate, un reset coperto può creare uno stash di sicurezza; il reset da terminale del tutorial non usa quella protezione.
Riferimenti ufficiali Git
Annullare git reset --hard: recuperare il commit perso
Recupera una modifica inclusa in un commit dopo git reset --hard tramite il reflog locale, finché l’oggetto del commit è conservato. Il recupero non è garantito dopo la scadenza del reflog o la pulizia degli oggetti.
Guarda su YouTube — si apre una nuova scheda
Registrato in un repository di prova.
Leggi la trascrizione della narrazione
- Hai eseguito git reset --hard e il tuo ultimo commit è sparito. Prima o poi capita a tutti. Ecco come recuperarlo e perché funziona.
- Prima, una modifica già salvata in un commit: riprovare due volte la chiamata di pagamento.
- Poi, nel terminale: git reset --hard HEAD~1.
- FluxGit se ne accorge subito. Il branch è tornato indietro e il commit non ne fa più parte.
- Ecco perché non è perso. Un branch è soltanto un’etichetta su un commit. Il reset sposta l’etichetta indietro, ma il commit resta nel repository e il reflog, il diario di Git, lo elenca ancora. Crea un branch su quel commit e sarà di nuovo disponibile.
- In FluxGit, Recover lost work lo spiega con parole semplici e ti porta nel posto giusto.
- La Safety Timeline descrive il reset in una frase. Crea un branch a partire dal momento precedente.
- Il tuo commit è tornato, sul proprio branch.
- Il lavoro non incluso in un commit non compare nel reflog. Con i punti di ripristino attivati e modifiche locali rilevate, FluxGit può salvare uno stash di sicurezza prima di un reset hard. Questo reset eseguito direttamente nel terminale Git evita tale protezione.
- Lo stesso nel terminale: git reflog, trova la riga prima del reset e crea un branch su quel commit.
- Riepilogo. Un reset sposta un’etichetta. Il reflog ricorda dove si trovava. Crea un branch per conservare il commit. Prossima lezione: recuperare un branch eliminato.