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.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow