2011-01-30 7 views
200

utilizzando Git X e devo aver armeggiato di tutto punto su qualcosa. Sembra che pochi giorni fa ho creato un ramo chiamato detached HEAD e ci sto impegnando. Il mio normale processo è di eseguire il commit su master e quindi inviarlo a origin. Ma non riesco a spingere detached HEAD.gitx Come faccio a reinserire il mio 'capo distaccato' nel master

La mia prossima fermata mi ha fregato. Ho selezionato git checkout master - e il mio ramo detached HEAD è scomparso. Tornando al mio progetto, tutti i miei cambiamenti negli ultimi giorni sono stati cancellati.

Esiste comunque la possibilità di ripristinare tali modifiche?

+2

Utilizzare git reflog per trovare i commit persi. –

+1

Vedere http://gitready.com/intermediate/2009/02/09/reflog-your-safety-net.html – rgardler

risposta

388

Se checkout master era l'ultima cosa che hai fatto, poi la voce di reflog[email protected]{1} conterrà i tuoi commit (altrimenti utilizzare git reflog o git log -p per trovarli). Utilizzare git merge [email protected]{1} per inoltrarli rapidamente in master.

EDIT:

Come notato nei commenti, Git Ready has a great article su questo.

git reflog e git reflog --all forniscono gli hash di commit dei commit errati.

Git Ready: Reflog, Your Safety Net

Fonte: http://gitready.com/intermediate/2009/02/09/reflog-your-safety-net.html

+8

Non essendo un utente power git questo è stato utile, ma non i dettagli sufficienti. Mi ha spinto a cercare in rete però - grazie. Ho trovato http://gitready.com/intermediate/2009/02/09/reflog-your-safety-net.html molto utile – rgardler

+4

Per chiunque utilizzi HEAD @ {1} in Powershell (Windows), riceverai un non errore descrittivo come errore: interruttore sconosciuto 'e'. Questo perché le parentesi graffe hanno un significato speciale in PowerShell. Dovresti digitare questo: "HEAD @ {1}". –

+1

Se usi shell di pesce, otterrai questa unione di errori: HEAD @ 1 - non qualcosa che possiamo unire ", fish rimuove le parentesi graffe quindi passa prima a bash, quindi funzionerà. – briankip

60

se la tua testa staccata è un avanzamento veloce del padrone e si desidera solo i commit a monte, è possibile

git push origin HEAD:master 

per spingere direttamente, o

git checkout master && git merge [ref of HEAD] 

si uniranno di nuovo in al tuo padrone locale.

+1

Questo ha funzionato per me e l'approccio di @Josh Lee no. Quindi sono contento che questo ha funzionato! – vy32

+1

Questo spinge il comando sulla testa staccata verso l'origine (origine/master), ma ti lascia in uno stato staccato localmente. 'Git checkout origin master 'è il modo migliore per tornare sul master branch? Sembrerebbe meglio unire prima il master, quindi tornare all'origine. – StuWeldon

+0

Voglio il mio SVN :-) – chrisl08

Problemi correlati