tab - git tag commits
¿Cómo puedo recuperar una confirmación perdida en Git? (3)
Primero, ¿qué es HEAD
?
HEAD
es simplemente una referencia a la confirmación actual (más reciente) en la rama actual.
Solo puede haber 1 HEAD
en cualquier momento dado.
Si no está en la última confirmación, lo que significa que HEAD
apunta a una confirmación previa en la historia, se denomina HEAD separado.
Pocas opciones:
git checkout
git checkout <commit_id>
git reflog
Siempre puedes usar el reflog
también
git reflog
git checkout HEAD@{...}
Esto te devolverá a tu compromiso deseado
git reset HEAD --hard <commit_id>
"Mueva" la cabeza a la confirmación deseada.
# This will destroy any local modifications.
# Don''t do it if you have uncommitted work you want to keep.
git reset --hard 0d1d7fc32
# Alternatively, if there''s work to keep:
git stash
git reset --hard 0d1d7fc32
git stash pop
# This saves the modifications, then reapplies that patch after resetting.
# You could get merge conflicts, if you''ve modified things which were
# changed since the commit you reset to.
- Nota: ( Desde Git 2.7 )
también puedes usargit rebase --no-autostash
también.
git checkout
git checkout -b <new branch> <commit_id>
git checkout HEAD~X // x is the number of commits t go back
Esto buscará una nueva rama que apunte al compromiso deseado
Aquí hay un esquema general de lo que se puede hacer.
En primer lugar, obtuve "su sucursal está por delante de origen / principal por 3 confirmaciones", luego mi aplicación ha vuelto a un horario anterior con cambios anteriores.
¿Cómo puedo recuperar lo que gasté las últimas 11 horas?
Otra forma de llegar a la confirmación eliminada es con el comando git fsck
.
git fsck --lost-found
Esto dará como resultado algo así como en la última línea:
dangling commit xyz
Podemos verificar que sea la misma confirmación usando el reflog
como se sugiere en otras respuestas. Ahora podemos hacer una git merge
git merge xyz
Nota:
No podemos recuperar el compromiso con fsck
si ya hemos ejecutado un comando git gc
que eliminará la referencia al compromiso pendiente.
git reflog
es tu amigo. Encuentre la confirmación que desea que esté en esa lista y puede restablecerla (por ejemplo: git reset --hard e870e41
).
(Si no cometió los cambios ... podría tener problemas: cometer temprano y comprometerse con frecuencia).