Perdí mi último commit porque accidentalmente ejecuté "git reset --hard HEAD ^". Nota: No quería poner el "^" al final.Lost Last Git Commit
¿Hay alguna forma de recuperarlo? Fue 2 días de trabajo :(
Perdí mi último commit porque accidentalmente ejecuté "git reset --hard HEAD ^". Nota: No quería poner el "^" al final.Lost Last Git Commit
¿Hay alguna forma de recuperarlo? Fue 2 días de trabajo :(
Creo que this article es lo que busca Según el artículo, su cometen es "ido", pero no el recolector de basura - algo así como la papelera de reciclaje en Windows
ejecuta git fsck --lost-found
. para encontrar el 'compromiso colgante', y míralo con git reflog
, luego combina el compromiso pendiente con tu rama actual, git merge 7c61179
.
Gracias. Eso lo hizo. Sabía que solo estaba flotando por allí en algún lugar, desvinculado de la rama. –
En combinación con difftool, he resuelto el problema de "pérdida de compromiso": git fsck --lost-found (se muestran hashes de commit colgantes) git difftool SOME_HASH somefolder/(He intentado todos los commit pendientes, hasta que he encontrado el necesario) –
Si conoce el ID comprometerse (por ejemplo, desplazarse hacia atrás en su terminal o utilizar git reflog
),
git reset --hard 61567de5d9
Dónde 61567de5d9 son las primeras cifras de la última (perdido) cometen ..
git hace que sea muy fácil volver a un estado anterior y trabaja muy duro para evitar que pierda los datos que ha cometido. Es por esta razón que deberías comprometerte a menudo. Tengo un comando git trash
que hace ese estado git reset --hard
, pero después de escribir una confirmación para poder deshacer el restablecimiento completo si lo necesito.
Para el estado más reciente (es decir, su caso), simplemente haga git reset --hard ORIG_HEAD
para deshacer lo que acaba de hacer.
Usted puede hacer un tiempo basado restablecer: git reset --hard '@{5 minutes ago}'
ponerse en un estado anterior en función del tiempo (hay un montón de opciones que puede utilizar, por ejemplo, git reset --hard '@{yesterday}'
para pretender hoy nunca ocurrió).
De lo contrario, busque la salida git reflog
para encontrar la cosa antes de la acción que siente que puso en mal estado y se restablece a eso.
Más general puedes usar '@ {1}', o 'HEAD @ {1}' en lugar de 'ORIG_HEAD'. –
En cualquier caso, NO use git gc. Eso eliminará los commits no enlazados permanentemente. – Tronic
No, gc * no * perderá esa confirmación a menos que haya hecho un esfuerzo para que sea más fácil para que git olvide sus confirmaciones (desactivación o poda agresiva). Cualquiera que haya pasado el tiempo suficiente para aprender a configurar git para perder su compromiso más reciente al menos sabrá que no debe hacer la pregunta. – Dustin
'git gc' de forma predeterminada no elimina commits no enlazados si están en reflog hasta 30 días en el caso de confirmaciones sin referencia (por defecto). –