2012-02-17 16 views
17

Ho fatto una dozzina di commit su quello che pensavo fosse il mio ramo, quindi ho controllato un altro ramo.GIT/detached HEAD, tornare al lavoro?

pronto a tornare al mio ramo iniziale, non ho trovato il mio codice aggiornato. Dopo aver guardato la mia storia nella console, ho capito ho lavorato in una filiale distaccata ...

E 'in qualche modo possibile per ottenere il lavoro che ho fatto sul ramo staccato?

risposta

23

Sì. Puoi usare il reflog. Prova git log -g HEAD. Questo mostrerà il reflog per HEAD, vale a dire ogni singolo commit a cui ha fatto riferimento HEAD e il motivo per cui è stato modificato in tale commit. Dovresti riuscire a trovare il tuo comando che ha estratto il ramo e vedere quale era il commit precedente.

È inoltre possibile utilizzare altri sintassi per indice nella reflog. Se hai appena eseguito il git checkout branch, poi [email protected]{1} si riferiscono alla precedente check-out commit (in modo da poter git checkout [email protected]{1} per tornare ad essa). O se sai che 10 minuti fa HEAD stava puntando alla cosa giusta, puoi usare git checkout [email protected]{10.minutes.ago}.

+2

grazie mille, hai appena risparmiato 4 ore di lavoro .... – apneadiving

+0

@apneadiving: qualsiasi cosa tu abbia effettivamente impegnato a git può essere recuperata in seguito. Sono necessari circa 1,5 mesi prima che un oggetto di commit non referenziato sia effettivamente raccolto dalla garbage collection (1 mese prima di cadere dal reflog e altre 2 settimane prima di essere eliminato). Nel peggiore dei casi è possibile trovare questi oggetti con 'git fsck --lost-found'. –

+0

ok grazie ancora per questi dettagli. – apneadiving

9

Relax, tutto è ancora lì :)

Basta chiamare

git reflog 

e git vi dirà a ciò che impegna HEAD sottolineato prima. Ci sarà una riga come

checkout: moving from c70e36e25ac2dbedde6cb376719381fe0ab53f19 to master 

che ti dice SHA1 della punta del tuo impegno con una testa staccata. Creare una nuova punta ramo che punta utilizzando

git branch saved-commits c70e36e25ac2dbedde6cb376719381fe0ab53f19 

Ora è possibile rebase quel ramo in cima al ramo avrebbero dovuto i commit per andare.

+0

Grazie mille, molto prezioso per avere risposte complementari. – apneadiving

Problemi correlati