all - git rm cached gitignore
¿Cómo revertir un "git rm-r"? (11)
Actualizar:
Desde git rm .
elimina todos los archivos en este y los directorios secundarios en el proceso de pago y en el índice, debe deshacer cada uno de estos cambios:
git reset HEAD . # This undoes the index changes
git checkout . # This checks out files in this and child directories from the HEAD
Esto debería hacer lo que quieras. No afecta a las carpetas principales de su código o índice desprotegido.
Antigua respuesta que no fue:
reset HEAD
hará el truco y no borrará los cambios no confirmados que haya realizado en sus archivos.
después de eso, debe repetir cualquier comando de git add
que haya puesto en cola.
Yo accidentalmente dije git rm -r .
. ¿Cómo me recupero de esto?
No me he comprometido.
Creo que todos los archivos se marcaron para su eliminación y también se eliminaron físicamente de mi pago local.
EDITAR: Podría (si supiera el comando) volver al último compromiso. Pero sería mucho mejor si pudiera deshacer el git rm -r .
. Porque no estoy realmente seguro de lo que hice después de la última confirmación y antes de git rm -r .
.
Obtener la lista de confirmación
git log --oneline
Por ejemplo, Stable commit hash: 45ff319c360cd7bd5442c0fbbe14202d20ccdf81
git reset --hard 45ff319c360cd7bd5442c0fbbe14202d20ccdf81
git push -ff origin master
Obtuve algunos archivos y seguí haciendo cambios antes de mi próxima confirmación cuando me di cuenta de que necesitaba recuperar algunos de esos archivos. En lugar de esconder y restablecer, simplemente puede desproteger los archivos individuales que perdió / eliminó si desea:
git checkout HEAD path/to/file path/to/another_file
Esto deja intactos sus otros cambios no comprometidos sin soluciones provisionales.
Para recuperar algunos archivos o carpetas individuales, se puede usar lo siguiente
git reset -- path/to/file
git checkout -- path/to/file
Primero se volverán a crear las entradas del índice para la path/to/file
y se volverá path/to/file
crear el archivo como estaba en la última confirmación, es decir, HEAD
.
Sugerencia: uno puede pasar un hash de confirmación a ambos comandos para volver a crear archivos de una confirmación anterior. Ver git reset --help
y git checkout --help
para más detalles.
Si ha confirmado y presionado los cambios, puede hacer esto para recuperar el archivo.
// Replace 2 with the # of commits back before the file was deleted.
git checkout HEAD~2 path/to/file
Si terminas con que ninguno de los anteriores funciona, puedes recuperar datos usando la sugerencia de aquí: http://www.spinics.net/lists/git/msg62499.html
git prune -n
git cat-file -p <blob #>
Tuve exactamente el mismo problema: estaba limpiando mis carpetas, reorganizando y moviendo archivos. Entré: git rm . y pulsa enter; y luego sentí que mis entrañas se aflojaban un poco. Por suerte, no escribí git commit -m "" inmediatamente.
Sin embargo, el siguiente comando
git checkout .
Lo restauré todo, y salvé mi vida.
Tuve una situación idéntica. En mi caso la solución fue:
git checkout -- .
Ya hay algunas respuestas buenas, pero puedo sugerir una sintaxis poco utilizada que no solo funciona bien, sino que es muy explícita en lo que quieres (por lo tanto, no da miedo ni es misteriosa)
git checkout <branch>@{"20 minutes ago"} <filename>
deshacer git rm
git rm file # delete file & update index
git checkout HEAD file # restore file & index from HEAD
deshacer git rm -r
git rm -r dir # delete tracked files in dir & update index
git checkout HEAD dir # restore file & index from HEAD
deshacer git rm -rf
git rm -r dir # delete tracked files & delete uncommitted changes
not possible # `uncommitted changes` can not be restored.
Uncommitted changes
not staged changes
Uncommitted changes
incluyen Uncommitted changes
not staged changes
, staged changes but not committed
.
git reset HEAD
Deberías hacerlo. Si no tiene cambios no comprometidos que le interesan, entonces
git reset --hard HEAD
Debería restablecer por la fuerza todo a su último compromiso. Si tiene cambios no confirmados, pero el primer comando no funciona, guarde los cambios no confirmados con git stash
:
git stash
git reset --hard HEAD
git stash pop