Inicialicé git repo some_dir_path
con git init
. Después de eso, decidí no incluir todos los archivos en el repositorio y publiqué git rm -f
. Como pensé, eliminaría todos los archivos del repositorio de git, no del directorio en sí. Y ahora, esto some_dir_path
está vacío, excepto el propio .git:
ls -aR some_dir_path:
.git:
branches config description HEAD hooks index info objects refs
...
Entonces, la pregunta es ¿hay alguna forma de recuperar los datos?
No tenía confirmaciones emitidas ni ramas antes git rm -f
desde las cuales restaurar.
Respuesta1
Como ninguno de los archivos se había confirmado, ahora están perdidos.
Si se hubieran cometido, se habría recuperado emitiendo
git reset --hard
Eso habría restaurado los archivos eliminados (y revertido cualquier cambio realizado en otros archivos) desde la última confirmación.
Ver también git reset --help
.
Respuesta2
El git rm
no ha sido comprometido, por lo que el procedimiento es bastante sencillo:
Punto de partida: se agrega un "un archivo":
$ git cat-file -p HEAD:onefile
content...
$ cat onefile
content...
Ahora el git rm
:
$ git rm -f onefile
rm 'onefile'
$ ls
El archivo realmente desapareció. El comando git no está confirmado. (La línea rm 'onefile'
esproducción, ¡no es un comando!)
Los consejos son fáciles aquí y ahora: que no cunda el pánico, obtenga una visión general:
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
deleted: onefile
Entonces, siguiendo la pista:
$ git reset HEAD *
Unstaged changes after reset:
D onefile
La eliminación pasó de no confirmada a no preparada.
$ git archive HEAD -o playback.tar
$ tar xf playback.tar --to-stdout
content...
Si git rm
se compromete, git reset HEAD~
se necesita a.
Si el repositorio está vacío después de solo git init
, el git rm
comando es "seguro":
$ git rm *
fatal: pathspec '*' did not match any files
La Q oculta lo que sucedió entre init y rm. ¿Debe haber sido git add?