Come recuperare i commit ripristinati in un repository Git

Se hai appena ripristinato un commit Git e cancellato accidentalmente un file o un pezzo di codice a causa di esso, non preoccuparti. Git tiene traccia di tutto e recuperare il file ripristinato è facile sia dalla riga di comando che dalla maggior parte dei client Git della GUI.

Non farlo Panico

Fortunatamente, Git tiene traccia di tutto, anche dei commit annullati. Non hai ancora cancellato nulla.

Potresti esserti imbattuto in questo problema mentre cercavi di “eliminare” un commit Git. Tuttavia, non puoi davvero eliminare i commit una volta creati. Puoi solo ripristinare un commit precedente e ignorare le modifiche locali o ripristinare le modifiche.

Ad esempio, nel mio caso con questo problema, avevo appena inizializzato il mio repository Git e accidentalmente messo in scena tutto senza scrivere il mio file .gitignore, che ha commesso ./bin/ cartelle e altra spazzatura che non volevo. Quindi, senza pensarci, ho cliccato su “revert” nel mio client Git e ho guardato con orrore mentre la mia intera directory veniva cancellata. Ops.

Il problema è che “ripristinando” un commit non è lo stesso che annullare lo staging delle modifiche e può avere effetti imprevisti sui file locali che possono essere risolti solo tramite Git. Questo sembra un problema serio finché non ti rendi conto che tutti i dati sono ancora archiviati nella cartella .git/ del tuo repository, quindi possono essere recuperati.

Pubblicità

Non aiuta il fatto che abbia un nome strano e il modo effettivo per rimuovere un commit indesiderato è eseguire un “soft reset” torna all'ultimo commit dietro HEAD. Quindi, la prossima volta, se desideri annullare un commit (per modificare le modifiche e ripetere il commit) usa il seguente comando:

git reset HEAD~1

Per chiarimenti—questo è non un “difficile” reset, che rimuove anche tutte le modifiche locali.

Risolvere i commit annullati

La correzione è piuttosto semplice. Ogni volta che esegui un “git revert,” Git effettua un nuovo commit con modifiche opposte al commit che viene ripristinato. Se hai creato un file, quel file viene rimosso e il commit lo riflette.

La soluzione consiste nell'applicare il commit di ripristino e quindi ripristinarlo, il che annullerà le modifiche. Questo funzionerà anche se il commit di ripristino non è nell'HEAD del tuo repository; in caso contrario, anche eseguire un hard reset funzionerebbe e libererebbe il tuo repository dall'imbarazzante “revert” e “annulla il ripristino” commit di cui i tuoi colleghi rideranno.

Per trovare l'hash per il commit, puoi eseguire git log:

Copia questo hash, quindi esegui git revert:

git revert 62ff517cc7c358eaf0bffdebbbe1b38dea92ba0f

Questo dovrebbe correggere il repository, anche se potresti dover eseguire il commit del ripristina manualmente se il commit automatico fallisce.

Pubblicità

Nella maggior parte dei client Git con GUI, il processo è estremamente semplice. Basta fare clic su “Ripristina” sul commit.

Ripristino senza traccia

Se sei all'HEAD del tuo albero di commit e ti piacerebbe farlo senza fare nuovi commit, e hai&#8217 ;t ha ancora spinto la modifica, puoi resettare a fondo il tuo ramo locale al vecchio commit.

git reset –hard HEAD^

Il motivo per cui questo deve essere un hard reset è perché un soft reset includerebbe ancora le modifiche non messe in scena dal ripristino. Vuoi ripristinare senza le modifiche locali.

Puoi anche eseguire il soft reset e scartare le modifiche locali manualmente.


Posted

in

by

Tags: