¿Cuál es la forma más sencilla de deshacer el
git reset HEAD~
¿mando? Actualmente, la única forma en que puedo pensar es haciendo un "git clone http: // ..." desde un repositorio remoto.
git reset 'HEAD@{1}'
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
.
reflog
para este propósito, me gusta usar git log --graph --decorate --oneline $(git rev-list -g --all)
. Muestra un árbol de todos los commits, incluidas las ramas colgantes sin nombre
git init
, y luego justo después de eso git reset --hard
. No hay reflog, o incluso ningún registro para empezar. ¿Son estos archivos bastante tostados ahora?
git add
(es decir, nunca ha montado esa versión del archivo), entonces git checkout
o git reset --hard
eliminará la única copia (el directorio de trabajo) sin copia de seguridad. Ojalá no fuera así.
git reset HEAD~12
oops ... git reset HEAD@{12}
nooo ... 'git reflog' al rescate! oh, es sologit reset HEAD@{1}
Antigua pregunta, y las respuestas publicadas funcionan muy bien. Sin embargo, hablaré con otra opción.
git reset ORIG_HEAD
ORIG_HEAD
hace referencia al commit al que HEAD
se hizo referencia anteriormente.
git reset ORIG_HEAD
? Gracias.
Mi situación era ligeramente diferente, lo hice git reset HEAD~
tres veces.
Para deshacerlo tuve que hacer
git reset HEAD@{3}
entonces deberías poder hacer
git reset HEAD@{N}
Pero si has hecho git reset usando
git reset HEAD~3
deberás hacer
git reset HEAD@{1}
Como {N} representa el número de operaciones en Reflog. Como Mark señaló en los comentarios.
reflog
comando le proporciona. Estuvo de acuerdo en que su punto sobre los números son los mismos para cualquier dirección ~ 3 / @ {3}, pero realmente no necesitaba ser una nueva respuesta.
1.Utilice git reflog
para obtener todas las referencias actualizadas.
2)git reset <id_of_commit_to_which_you_want_restore>
--hard
! El riesgo de ejecutar accidentalmente este comando es mucho mayor. Por ejemplo, desea quitar el escenario de un solo archivo congit reset foo-file
. Solo escribe la primera parte del nombre de archivo, presione la pestaña para autocompletar, en realidad se completa con un nombre de rama, no lo nota y ejecuta el comando en sugit reset foo-branch
lugar. Voilà