¿Cómo recuperar el compromiso del ‘estado principal separado’?

2 minutos de lectura

Revisé otra rama con actualizaciones, luego hice algunos cambios, volví al git principal y ¡ahora los cambios desaparecieron! ¿Puedo recuperarlos? la terminal era basicamente:

$ 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

  • duplicado de stackoverflow.com/questions/4845505/…?

    – chispas

    27 de enero de 2012 a las 22:56

Suponiendo que todavía estás en el maestro:

git merge 7c09e17

debería ser suficiente. git suele ser bueno para decirle las ID de compromiso, si mira la terminal.

  • checkout master, git merge 7c09e17, git checkout master, git push, parece resolverlo, ¡gracias!

    – Sin errores

    27 de enero de 2012 a las 23:10

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

    – Sin errores

    28 de enero de 2012 a las 0:40

  • @NoBugs, si desea ver todas las confirmaciones colgantes (confirmaciones que no están en una rama), creo que desea git fsck --unreachable --no-reflogs.

    – Mateo Flaschen

    28 de enero de 2012 a las 0:47


  • y si no vio la terminal, puede obtener la información que necesita de git reflog

    – William Pursell

    28 de enero de 2012 a las 13:34

  • @MatthewFlaschen ¡Ojalá pudiera votarte más de una vez! ¡Esto acaba de salvarme el trasero!

    – KOGI

    25/07/2013 a las 22:30

Tuve un similar problema. encontré git reflog ser un salvavidas. En caso de que ayude a ilustrar su uso, aquí está el resultado:

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

Mi situación era un poco diferente en el sentido de que había realizado una confirmación mientras estaba en un estado HEAD desconectado a partir de una confirmación muy antigua.

Si simplemente quisiera fusionar ec31ccf0735240d0cdc5a44fd443039c3caa43f0 (también conocido como ec31ccfque es donde yo tenido estado) en masterPienso git merge ec31ccf o git rebase ec31ccf podría haber funcionado. Pero esto sería principalmente fusionar la historia antigua en mi caso (con conflictos de fusión, etc.).

En cambio, solo quería recuperar lo que había hecho en ec31ccfy git cherry-pick ec31ccf funcionó muy bien

  • git reflog ¡Me ayudó mucho al encontrar mi rama separada perdida! ¡gracias por mencionarlo!

    – Félix D.

    30 de agosto de 2018 a las 10:50

¿Ha sido útil esta solución?