Git Reflog e recupero della cronologia
Acquisisca padronanza di `git reflog` per recuperare commit o branch persi, creando una rete di sicurezza per il proprio lavoro.
Git Reflog e recupero della cronologia è una lezione Git & GitHub Professional Workflow gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Git & GitHub Professional Workflow, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Git & GitHub Professional Workflow include 4 lezioni in totale.
Che cos'è Git Reflog?
Ha mai eliminato accidentalmente un branch o eseguito un reset sul commit sbagliato? Niente panico! Git dispone di una potente rete di sicurezza chiamata Reflog.
Il reflog (registro dei riferimenti) è un registro delle posizioni precedenti di HEAD e dei puntatori ai branch nel Suo repository locale.
Come il reflog tiene traccia della cronologia
A differenza della cronologia dei commit (git log), che tiene traccia delle modifiche ai file del progetto, il reflog tiene traccia delle modifiche ai riferimenti del repository.
Ogni volta che HEAD (il commit corrente) o il puntatore a un branch cambia posizione, Git registra l'evento nel reflog. Questo include:
- Il commit delle modifiche
- Il passaggio da un branch all'altro
- L'unione o il rebase
- L'esecuzione di un reset
- La clonazione di un repository
Visualizzare il reflog
Per visualizzare il reflog, basta usare il comando git reflog. Viene mostrato un elenco delle azioni e lo stato di HEAD in quel momento.
Simuliamo alcune azioni e poi visualizziamo il reflog:
git init my_repo
cd my_repo
echo "First line" > file.txt
git add file.txt
git commit -m "Initial commit"
echo "Second line" >> file.txt
git add file.txt
git commit -m "Add second line"
git reflogInterpretare le voci del reflog
Ogni voce del reflog ha un formato specifico. Analizziamo una voce tipica che potrebbe visualizzare:
a1b2c3d HEAD@{0}: commit: Add new feature
a1b2c3d: l'hash SHA-1 del commit in cui si trovavaHEADin quel momento.HEAD@{0}: il «puntatore alla voce del reflog».@{0}rappresenta lo stato più recente,@{1}quello precedente e così via.commit: Add new feature: una descrizione dell'azione che ha causato lo spostamento diHEAD.
Questi puntatori sono fondamentali per il ripristino!
Scenario: recuperare un commit perso
Immagini di aver creato un commit e di averlo poi annullato accidentalmente con git reset --soft HEAD~1. Il commit non si trova più nella cronologia del branch corrente, ma non è veramente scomparso!
Il reflog lo ricorda. Simuliamo questo errore comune:
git init my_project_recovery
cd my_project_recovery
echo "Initial content" > start.txt
git add start.txt
git commit -m "Initial commit"
echo "Important feature" > feature.txt
git add feature.txt
git commit -m "Added an important feature"
# Oops! Accidentally reset
git reset --soft HEAD~1
git reflogRipristinare il commit
Dopo il reset, eseguendo git reflog vedrà una voce relativa al commit «Added an important feature», probabilmente come HEAD@{1} o qualcosa di simile.
Per recuperarlo, può usare git reset con la voce del reflog. Ad esempio, se l'hash del commit perso era abcdefg o la sua voce del reflog era HEAD@{1}:
# Assuming the lost commit was HEAD@{1} in the reflog
git reset --hard HEAD@{1}
# Or using the specific commit hash from reflog
# git reset --hard abcdefg
# Now, check your log. The commit is back!
git log --onelineScenario: recuperare un branch eliminato
Cosa succede se elimina accidentalmente un intero branch prima di unirlo, oppure pensa di non averne più bisogno?
I branch sono semplicemente puntatori a commit. Se elimina un branch, i commit a cui puntava non vengono rimossi immediatamente dal repository. Il reflog ricorda ancora dove si trovava HEAD di quel branch!
Ripristinare un branch dal reflog
Supponiamo che avesse un branch chiamato feature-x, ci abbia lavorato e lo abbia poi eliminato con git branch -D feature-x.
Eseguendo git reflog, potrebbe visualizzare una voce come:
1234567 HEAD@{5}: branch: Created branch feature-x oppureabcdefg HEAD@{2}: checkout: moving from feature-x to master
Può usare l'hash del commit (ad esempio 1234567 o abcdefg) della voce del reflog in cui il branch era attivo per ricrearlo:
# Assume 'feature-x' was deleted and its last commit was '1234567'
# Create a new branch pointing to that commit
git branch feature-x-recovered 1234567
# Now, check out your recovered branch
git checkout feature-x-recovered
# Verify its history
git log --onelineLe voci del reflog scadono
Sebbene il reflog sia una potente rete di sicurezza, le sue voci non durano per sempre. Git elimina le vecchie voci del reflog dopo un determinato periodo.
- Per impostazione predefinita, le voci raggiungibili (dal
HEADcorrente) scadono dopo 90 giorni. - Le voci non raggiungibili (ad esempio quelle provenienti da branch eliminati o da commit non più referenziati) scadono dopo 30 giorni.
È quindi consigliabile recuperare il lavoro «perso» il prima possibile!
Sfida: recupero dal reflog
Ha creato un nuovo branch per una funzionalità, eseguito diversi commit e poi lo ha eliminato accidentalmente senza unirlo. Eseguendo git reflog visualizza questa voce:
...
c0ffee1 HEAD@{3}: commit: Implement new user profile page
bada55e HEAD@{4}: checkout: moving from feature/profile to main
...Quale sequenza di comandi ricreerebbe correttamente il branch feature/profile, facendolo puntare all'ultimo commit che conteneva prima dell'eliminazione?
Reflog: la rete di sicurezza di Git
Ha imparato a usare git reflog, uno strumento fondamentale per recuperare il lavoro «perso» nel repository Git locale. Ricordi che:
- Registra le posizioni precedenti di
HEADe dei puntatori ai branch. - Usi
git reflogper visualizzare questa cronologia. - Può recuperare commit o branch usando
git resetogit branchcon le voci del reflog (HEAD@{n}o gli hash dei commit). - Le voci del reflog scadono, quindi agisca rapidamente se deve recuperare qualcosa!
Mantenga ordinata la cronologia Git, ma sappia che il reflog è disponibile per le emergenze!
Domande Frequenti
La lezione «Git Reflog e recupero della cronologia» è gratuita?
Sì — il testo completo di «Git Reflog e recupero della cronologia» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Git & GitHub Professional Workflow, passa a CoddyKit PRO. Il corso Git & GitHub Professional Workflow include 4 lezioni in totale.
Cosa imparerò in «Git Reflog e recupero della cronologia»?
Acquisisca padronanza di `git reflog` per recuperare commit o branch persi, creando una rete di sicurezza per il proprio lavoro. Eserciti Git & GitHub Professional Workflow con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Git & GitHub Professional Workflow?
Non è richiesta alcuna esperienza precedente. Git & GitHub Professional Workflow su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.
Quanto tempo richiede la lezione «Git Reflog e recupero della cronologia»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Git & GitHub Professional Workflow?
Sì. Ogni lezione Git & GitHub Professional Workflow include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Git Reflog e recupero della cronologia
- Git Bisect per il debug
- Manutenzione e pulizia del repository
- Riscrivere la cronologia con git filter-repo