2012-01-27 20 views
17

Revisé otra rama con actualizaciones, luego hice algunos cambios, volví a cambiar al git principal y ¡ahora los cambios desaparecieron! ¿Puedo recuperarlos? el terminal era básicamente:¿Cómo recuperar el compromiso desde 'estado de cabeza separada'?

$ git commit 
[detached HEAD 7c09e17] Fixed some stuff 
    files changed, insertions(+), deletions(-) 
$ git push master 
fatal: 'master' does not appear to be a git repository 
fatal: The remote end hung up unexpectedly 
$ git checkout master 
Previous HEAD position was 7c09e17... Fixed some stuff 
Switched to branch 'master' 
$ git merge theother/directory 
+0

dup de http://stackoverflow.com/questions/4845505/gitx-how-do-i-get-my-detached-head-commits-back-into-master? – smparkes

Respuesta

30

asumiendo que usted está todavía en el Master:

git merge 7c09e17 

debería ser suficiente. git suele ser bueno para decirle los ID de confirmación, si mira la terminal.

+0

checkout master, git merge 7c09e17, git checkout master, git push, parece resolverlo, gracias! – NoBugs

+0

y, por curiosidad, ¿hay alguna manera de ver/cancelar todas estas confirmaciones en mi máquina local? – NoBugs

+8

@NoBugs, si quieres ver todos los commit pendientes (no se compromete en una rama), creo que quieres 'git fsck --unreachable --no-reflogs'. –

7

Tuve un problema similar. Encontré git reflog como un salvavidas. En caso de que ayuda a ilustrar que utilizar, aquí está la salida:

e3191c5 [email protected]{0}: checkout: moving from ec31ccf0735240d0cdc5a44fd443039c3caa43f0 to master 
ec31ccf [email protected]{1}: commit: Added code and data for simulation. 
781b9ee [email protected]{2}: checkout: moving from 3bd804e635b913840c71b7f8a33665460580d45f to 781b 
3bd804e [email protected]{3}: checkout: moving from master to 3bd804 

Mi situación era un poco diferente, ya que me había hecho una confirmación, mientras que en un estado de cabeza separada a partir de una muy antigua comprometerse.

Si yo simplemente quería fusionar ec31ccf0735240d0cdc5a44fd443039c3caa43f0 (también conocido como ec31ccf, que es donde yo tenía habido) en master, creo git merge ec31ccf o git rebase ec31ccf podría haber funcionado. Pero esto sería principalmente la fusión de la historia antigua en mi caso (con conflictos de fusión, etc.).

En su lugar, solo quería recuperar lo que había hecho en ec31ccf, y git cherry-pick ec31ccf funcionó bien.

Cuestiones relacionadas