2011-01-30 10 views
200

Usando Git X y debe haber perdido el control de algo real. Parece que hace unos días creé una rama llamada detached HEAD y me he estado comprometiendo con ella. Mi proceso normal es comprometerme con master y luego presionarlo al origin. Pero no puedo presionar detached HEAD.gitx ¿Cómo puedo hacer que mi 'CABEZA Independiente' se vuelva a comprometer en el maestro

Mi siguiente parada me jodió. Seleccioné git checkout master - y mi rama detached HEAD desapareció. Volviendo a mi proyecto, todos mis cambios en los últimos días han sido borrados.

¿De todos modos puedo recuperar esos cambios?

+2

Usa git reflog para encontrar los commits perdidos. –

+1

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

Respuesta

388

Si checkout master fue el último que hizo, entonces la entrada reflog[email protected]{1} contendrá tus commits (de lo contrario usar git reflog o git log -p para encontrarlos). Use git merge [email protected]{1} para avanzar rápidamente al master.

EDIT:

Como se señaló en los comentarios, Git Ready has a great article en esto.

git reflog y git reflog --all le dará los hashes de confirmación de los commits mal colocados.

Git Ready: Reflog, Your Safety Net

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

+8

No ser un usuario de Git de poder fue útil, pero no detalles suficientes. Sin embargo, me impulsó a buscar en la red, gracias. Encontré http://gitready.com/intermediate/2009/02/09/reflog-your-safety-net.html muy útil – rgardler

+4

Para cualquier persona que ejecute HEAD @ {1} en Powershell (Windows), obtendrá un no error descriptivo como error: interruptor desconocido 'e'. Esto es porque las llaves tienen un significado especial en Powershell. En su lugar, querrá escribir esto: 'HEAD @ {1}'. –

+1

Si está utilizando concha de pez, obtendrá este error 'merge: HEAD @ 1 - no es algo que podamos fusionar', fish quita las llaves, así que cambie a bash primero, entonces funcionará. – briankip

60

Si su cabeza separada es un avance rápido del maestro y lo que desea las confirmaciones aguas arriba, puede

git push origin HEAD:master 

para empujar directamente o

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

lo fusionarán de nuevo en a su maestro local.

+1

Esto funcionó para mí y el enfoque de @Josh Lee no. ¡Así que estoy contento de que esto haya funcionado! – vy32

+1

Eso empuja los commits en la cabeza separada de regreso al origen (origen/maestro), pero te deja en un estado separado localmente. ¿Es 'git checkout origin master' la mejor manera de volver a la rama principal? Parecería mejor fusionarse primero en maestro, luego retroceder al origen. – StuWeldon

+0

Quiero mi SVN :-) – chrisl08

Cuestiones relacionadas