Deshacer eliminar en GIT


Hice algo muy estúpido. Hice un commit usando git commit (ediciones de archivo + nuevos archivos) (C). Luego hice la última modificación. Luego borré todos los archivos recursivamente (!) utilizando git rm -r Luego hice otra confirmación de git (C).

A-B-C
    ↑
  master

¿Hay alguna forma de recuperar los archivos pero mantener los cambios que tuve en mi primera confirmación? (C) Prefiero no volver a (B). Probé git reset soft soft head^, entonces el estado de git lista los archivos que borré, luego hice git checkout, pero todavía no hubo suerte. Ni siquiera saber si es posible.

Author: Brian Tompsett - 汤莱恩, 2012-02-28

2 answers

Hazte un favor y no hagas git checkout <hash> como sugiere la otra respuesta y entra en más problemas.

SI ha eliminado el archivo de su directorio de trabajo y aún no ha confirmado los cambios, haga lo siguiente:

git checkout -f

PRECAUCIÓN: confirme los archivos no comprometidos antes de ejecutar este comando, de lo contrario los perderá todos

Los archivos eliminados deben estar de vuelta.

Si no y si puede encontrar la confirmación que desea ( C, etc. - tu pregunta no está clara ) desde git reflog, solo haz git reset --hard <hash from reflog> y deberías estar listo.

 162
Author: manojlds,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-10 20:50:56

Si te entendí correctamente, reescribiste la confirmación C. Así que la confirmación original, llamémosla C1, no es accesible desde tu gráfico de confirmación, pero sigue ahí (git mantiene todas las confirmaciones por un tiempo). Use git reflog para obtener el hash de confirmación y git checkout <hash> u otro comando apropiado para obtener el antiguo estado C1.

 6
Author: Sascha,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-02-28 07:07:20