Come tornare all'ultima impegnarsi nella storia dopo che ho usato ripristino git per andare a un vecchio changeset?
Domanda
Supponiamo che la mia storia va in questo modo:
A - B - C - D (master)
Se faccio git reset B
, io ho:
A - B (master)
Il problema è che, git log
ora mostrami solo la storia da A a B, e non riesco a vedere C e D più.
Come faccio a tornare a D?
Soluzione
Si dovrebbe essere in grado di vedere D con git reflog
.
href="http://gitfu.wordpress.com/2008/04/06/git-reflog-no-commits-left-behind/" per esempio .
L'unica volta commit vengono effettivamente cancellati è se si git gc --prune (in modo da stare attenti con quella!).
Se si esegue git reflog in questo momento in un repository che hai lavorato in, vedrete un sacco di cambiamenti che sembrano qualcosa di simile:
c5c3a82... HEAD@{0}: pull origin featureB: Merge made by recursive.
49d0608... HEAD@{1}: reset --hard HEAD^: updating HEAD
3ed01b1... HEAD@{2}: pull origin featureA: Merge made by recursive.
49d0608... HEAD@{3}: pull origin bugfixJ: Merge made by recursive.
854d44e... HEAD@{4}: commit: Add more cowbell to foo.c
6dbc22d... HEAD@{5}: pull origin bugfixI: Merge made by recursive.
9bdb763... HEAD@{6}: commit: Remove weevils
8518f9d... HEAD@{7}: checkout: moving from wickedfeature to master
Queste linee possono essere suddivisi in 4 parti:
- commettere hash,
- commettere puntatore,
- azione,
- e informazioni supplementari.
Se volessimo recuperare il commit che è stato perso a
HEAD@{1}
, potremmo semplicementegit reset --hard HEAD@{2}
.
Ora la nostra filiale di corrente (e copia di lavoro) sono impostati allo stato repository prima di noi il reset.Se volessimo vedere solo ciò che stato era, potremmo
git checkout -b temp HEAD@{2}
(ogit checkout HEAD@{2}
se avete git 1.5.0 e successive).
Altri suggerimenti
Ok, l'ho trovato.
È possibile utilizzare git reflog
.
Non sapevo cosa fosse per, ma ora posso vedere è un registro di tutti i riferimenti HEAD sono stati punta a.