tag tab remove practices crear commits commands best git

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 usar git 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).