Me gustaría restaurar un directorio completo (de forma recursiva) del historial de mi repositorio de git.
Solo hay 1 rama (maestra).
Sé el compromiso donde se incluyeron los errores.
¿Puedo usar el hash sha1 de la confirmación principal para restaurar el estado del directorio tal como estaba antes de que se incluyeran los errores?
Pensé en algo como esto:
git checkout 348ce0aa02d3738e55ac9085080028b548e3d8d3 path/to/the/folder/
Pero no funcionó.
git checkout 348ce0aa02d3738e55ac9085080028b548e3d8d3 -- path/to/the/folder/
Respuestas:
intente agregar '-' entre revisiones y rutas:
Y si desea recuperar un directorio de la confirmación anterior, puede reemplazar el hash de confirmación por HEAD ~ 1, por ejemplo:
fuente
rm -Rf path/to/the/folder
continuacióngit checkout 348ce0aa02d3738e55ac9085080028b548e3d8d3 -- path/to/the/folder/
- Resultado: ese camino tenía exactamente los mismos archivos que en ese compromiso, no hay diferencias y no hay archivos adicionales que habían sido creados después de este cometido. Que es lo que quiero.--
?Hay dos formas sencillas de hacer esto:
Si la confirmación que incluyó los errores solo incluyó los errores, utilice
git revert
para invertir los efectos.Si no, el camino fácil es este:
git checkout 348…
cp -a path/to/the/folder ../tmp-restore-folder
git checkout HEAD # or whatever
rm -rf path/to/the/folder
mv ../tmp-restore-folder path/to/the/folder
git add path/to/the/folder
git commit -m "revert …"
fuente
Si simplemente lo haces
git checkout <SHA-ID>
, lo moverá temporalmente a ese compromiso de sha.Cada objeto de confirmación contiene la estructura completa del disco en ese momento, por lo que si tiene archivos allí y necesita copiarlos, puede hacerlo. Sin embargo, advierte que no estarás en ninguna rama, por lo que tendrás que regresar al maestro antes de copiar el archivo en tu árbol de trabajo y enviarlo.
fuente