Git School · FluxGit

Annullare git reset --hard con il reflog

FluxGit ·

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_COMMIT

Conserva 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-work

Primo 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 --short

Domande 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

Git School · 1:50

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.

Annullare git reset --hard: recuperare il commit perso
Voce narrante in inglese. Su YouTube sono disponibili sottotitoli manuali in 11 lingue. Questa trascrizione è in italiano.

Guarda su YouTube — si apre una nuova scheda

Registrato in un repository di prova.

Leggi la trascrizione della narrazione
  1. 00:03 Hai eseguito git reset --hard e il tuo ultimo commit è sparito. Prima o poi capita a tutti. Ecco come recuperarlo e perché funziona.
  2. 00:12 Prima, una modifica già salvata in un commit: riprovare due volte la chiamata di pagamento.
  3. 00:19 Poi, nel terminale: git reset --hard HEAD~1.
  4. 00:24 FluxGit se ne accorge subito. Il branch è tornato indietro e il commit non ne fa più parte.
  5. 00:31 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.
  6. 00:47 In FluxGit, Recover lost work lo spiega con parole semplici e ti porta nel posto giusto.
  7. 00:59 La Safety Timeline descrive il reset in una frase. Crea un branch a partire dal momento precedente.
  8. 01:06 Il tuo commit è tornato, sul proprio branch.
  9. 01:10 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.
  10. 01:26 Lo stesso nel terminale: git reflog, trova la riga prima del reset e crea un branch su quel commit.
  11. 01:34 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.

Percorsi correlati

Scarica FluxGit