eliminado - Restaurar una carpeta eliminada en un repositorio Git
git recuperar head (6)
He eliminado todos los contenidos dentro de una carpeta y la carpeta está vacía. Todavía tenía una copia en mi repo remoto. Pero cuando hice un git pull
, no devolví los archivos eliminados, ¿no se supone que haga eso?
Así que investigué un poco y vi que puedes revertir un archivo haciendo git checkout <revision> -- <name of file>
Pero eso solo funciona en archivos.
¿Cómo puedo recuperar todos los archivos dentro del directorio?
Lo único que funcionó para mí fue sacar el repositorio en otra carpeta. Supongamos que el repositorio actual está en /home/me/current
.
Entonces hice
git clone /home/me/current /home/me/temp
Esto hace un clon separado del repositorio en /home/me/temp
Ahora puedo ir a /home/me/temp
y hacer lo que quiera. Por ejemplo
git reset --hard commit-hash-before-delete
Ahora puedo copiar la carpeta del archivo borrado de nuevo
cp -r /home/me/temp/some/deleted/folder /home/me/current/some/deleted/folder
Y borra la carpeta temporal.
rm -rf /home/me/temp
Los ejemplos de
git checkout -- some/deleted/folder
git checkout -- some/deleted/folder/*
NO FUNCIONAN
$ git checkout -- some/deleted/folder/*
zsh: no matches found: some/deleted/folder/*
$ git checkout -- some/deleted/folder
error: pathspec ''some/deleted/folder'' did not match any file(s) known to git.
Otros ejemplos como
git reset --hard HEAD
Son destructivos más allá de los archivos borrados. Cualquier otro cambio también se perderá.
similar
git reset --hard some-commit
perderá cualquier confirmación después de some-commit
Para eliminaciones no confirmadas, es tan simple como esto:
git reset HEAD rel / ruta / a / eliminado / directorio / *
Rt Haga clic en el proyecto -> Equipo -> Restablecer
En el tipo de reinicio, seleccione Reinicio completo. Esto replicará su repositorio remoto en su área de trabajo.
Si aún no ha confirmado sus cambios, puede revertir el contenido o un directorio:
git checkout -- removed_directory
Si quieres revertir todos los cambios haz:
git reset --hard HEAD
Si no especifica un archivo específico, debería poder extraer todo el contenido de un compromiso específico. Como: git checkout 264794319e9695ba843cd6
(asumiendo que el hash tiene todos sus archivos en el estado correcto).
La razón por la que pull
no está restaurando archivos es que Git ve tus eliminaciones como el cambio más reciente, aplicando eso sobre cualquier cosa que estés extrayendo.
(Recomiendo experimentar en una nueva rama).
Todo lo que puedes hacer con un archivo, también puedes hacerlo con una carpeta.
También tenga en cuenta Buscar y restaurar un archivo eliminado en un repositorio Git
Los archivos se eliminan del árbol de trabajo pero aún no se han confirmado:
Si aún no ha indexado ( git add
) sus cambios, puede revertir el contenido de un directorio:
git checkout -- path/to/folder
Si la eliminación ya está indexada, debe restablecer eso primero:
git reset -- path/to/folder
git checkout -- path/to/folder
Restaure el árbol de trabajo completo (no una sola carpeta), pero pierda todos los cambios no confirmados
git reset --hard HEAD
Cuando los archivos se eliminan en algún compromiso en el pasado:
Encuentra la última confirmación que afectó la ruta dada. Como el archivo no está en la confirmación HEAD, esta confirmación debe haberla eliminado.
git rev-list -n 1 HEAD -- <file_path>
Luego verifique la versión en la confirmación anterior, usando el símbolo caret ( ^
):
git checkout <deleting_commit>^ -- <file_path>
Restaurar el árbol de trabajo completo desde un compromiso distante
git reset --hard <revision>