Respuesta corta:
git reset 'HEAD@{1}'
Respuesta larga:
Git mantiene un registro de todas las actualizaciones de referencia (por ejemplo, pago, reinicio, confirmación, fusión). Puede verlo escribiendo:
git reflog
En algún lugar de esta lista está el compromiso que perdiste. Digamos que acabas de escribir git reset HEAD~
y quieres deshacerlo. Mi reflog se ve así:
$ git reflog
3f6db14 HEAD@{0}: HEAD~: updating HEAD
d27924e HEAD@{1}: checkout: moving from d27924e0fe16776f0d0f1ee2933a0334a4787b4c
[...]
La primera línea dice que hace HEAD
0 posiciones (en otras palabras, la posición actual) es 3f6db14; se obtuvo restableciendo a HEAD~
. La segunda línea dice que hace HEAD
1 posición (en otras palabras, el estado antes del reinicio) es d27924e. Se obtuvo al verificar una confirmación particular (aunque eso no es importante en este momento). Entonces, para deshacer el restablecimiento, ejecute git reset HEAD@{1}
(o git reset d27924e
).
Si, por otro lado, ha ejecutado algunos otros comandos desde entonces que actualizan HEAD, la confirmación que desea no estará en la parte superior de la lista, y deberá buscar a través de reflog
.
Una nota final: puede ser más fácil mirar la reflog
rama específica que desea restablecer, digamos master, en lugar de HEAD
:
$ git reflog show master
c24138b master@{0}: merge origin/master: Fast-forward
90a2bf9 master@{1}: merge origin/master: Fast-forward
[...]
Esto debería tener menos ruido que el general HEAD reflog
.