Annullare un commit è un po 'spaventoso se non sai come funziona. Ma in realtà è incredibilmente facile se capisci.
Supponi di avere questo, dove C è il tuo HEAD e (F) è lo stato dei tuoi file.
(F)
A-B-C
↑
master
Si desidera eseguire il nuke commit C e non vederlo mai più e perdere tutte le modifiche nei file modificati localmente . Tu lo fai:
git reset --hard HEAD~1
Il risultato è:
(F)
A-B
↑
master
Ora B è la TESTA. Poiché hai utilizzato --hard
, i tuoi file vengono ripristinati al loro stato al commit B.
Ah, ma supponiamo che commettere C non sia stato un disastro, ma solo un po 'fuori. Tu vuoi annullare il commit ma mantenere le modifiche per un po 'di modifica prima di eseguire un commit migliore. A partire da qui, con C come TESTA:
(F)
A-B-C
↑
master
Puoi farlo, tralasciando --hard
:
git reset HEAD~1
In questo caso il risultato è:
(F)
A-B-C
↑
master
In entrambi i casi, HEAD è solo un puntatore all'ultimo commit. Quando fai ungit reset HEAD~1
, dici a Git di spostare il puntatore HEAD indietro di un commit. Ma (a meno che tu non usi --hard
) lasci i tuoi file come erano. Quindi ora git status
mostra le modifiche che hai verificato in C. Non hai perso nulla!
Per il tocco più leggero, puoi persino annullare il commit ma lasciare i tuoi file e il tuo indice :
git reset --soft HEAD~1
Questo non solo lascia i tuoi file da solo, lascia anche solo il tuo indice . Quando lo fai git status
, vedrai che gli stessi file sono nell'indice di prima. In effetti, subito dopo questo comando, potresti fare git commit
e rifaresti lo stesso commit che hai appena avuto.
Ancora una cosa: supponi di distruggere un commit come nel primo esempio, ma poi scopri di averne bisogno dopo tutto ? Buona fortuna, vero?
No, c'è ancora un modo per riaverlo. Digita git reflog
e vedrai un elenco di shas (parziali) di commit (ovvero hash) in cui ti sei spostato. Trova il commit che hai distrutto e fai questo:
git checkout -b someNewBranchName shaYouDestroyed
Ora hai resuscitato quell'impegno. I commit non vengono effettivamente distrutti in Git per circa 90 giorni, quindi di solito puoi tornare indietro e salvare uno di cui non intendevi sbarazzarti.