Git
Reflog: ripristino dei commit non visualizzati nel log git
Ricerca…
Osservazioni
Il reflog di Git registra la posizione di HEAD (il ref per lo stato corrente del repository) ogni volta che viene modificato. Generalmente, ogni operazione che potrebbe essere distruttiva implica lo spostamento del puntatore HEAD (poiché se qualcosa viene modificato, incluso in passato, l'hash del commit tip cambierà), quindi è sempre possibile tornare a uno stato precedente, prima di un'operazione pericolosa , trovando la linea giusta nel reflog.
Gli oggetti che non sono referenziati da alcun riferimento sono solitamente garbage collection in ~ 30 giorni, tuttavia, il reflog potrebbe non essere sempre in grado di aiutare.
Ripristino da una cattiva base
Supponi di aver avviato un rebase interattivo:
git rebase --interactive HEAD~20
e, per errore, hai schiacciato o lasciato cadere alcuni commit che non volevi perdere, ma poi hai completato il rebase. Per recuperare, fai git reflog
, e potresti vedere un output come questo:
aaaaaaa HEAD@{0} rebase -i (finish): returning to refs/head/master
bbbbbbb HEAD@{1} rebase -i (squash): Fix parse error
...
ccccccc HEAD@{n} rebase -i (start): checkout HEAD~20
ddddddd HEAD@{n+1} ...
...
In questo caso, l'ultimo commit, ddddddd
(o HEAD@{n+1}
) è la punta del tuo ramo pre-rebase . Quindi, per recuperare quel commit (e tutti i genitori si impegnano, compresi quelli accidentalmente schiacciati o rilasciati), fai:
$ git checkout HEAD@{n+1}
A questo punto puoi creare un nuovo ramo con git checkout -b [branch]
. Vedi Branching per maggiori informazioni.