Dije accidentalmente git rm -r .
. ¿Cómo me recupero de esto?
No me comprometí.
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 commit. Pero sería mucho mejor si pudiera deshacer el git rm -r .
. Porque no estoy realmente seguro de lo que hice después del último commit y antes del git rm -r .
.
-f
agit rm
git, no habrá eliminado ningún archivo que tuviera cambios organizados o no organizados, por lo quegit reset; git checkout .
debería recuperar todo.git restore
:git restore -s@ -SW -- .
. Vea mi respuesta a continuación .Respuestas:
Deberías hacerlo. Si no tiene ningún cambio no comprometido que le interese, entonces
debería restablecer por la fuerza todo a su último commit. Si tiene cambios no confirmados, pero el primer comando no funciona, guarde los cambios no confirmados con
git stash
:fuente
git reset --hard HEAD
destruye cualquier cambio útil que haya realizado en los directorios principales del directorio de trabajo actual.Git-rmd 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 retirar los archivos individuales que perdió / eliminó si desea:
Esto deja sus otros cambios no confirmados intactos sin soluciones.
fuente
git rm
recursiva en lugar de una recursiva completagit rm -r
. Para una eliminación recursiva completa, las otras soluciones pueden ser mejores, dependiendo de la cantidad de archivos eliminados.Para recuperar algunos archivos o carpetas individuales, se puede usar lo siguiente
Esto recreará primero las entradas de índice
path/to/file
y recreará el archivo como estaba en el último commit, es decirHEAD
.Sugerencia: se puede pasar un hash de confirmación a ambos comandos para recrear archivos de una confirmación anterior. Ver
git reset --help
ygit checkout --help
para más detalles.fuente
git rm
operación sin eliminar otros cambios no comprometidos.Actualizar:
Dado que
git rm .
elimina todos los archivos en este y los directorios secundarios en la comprobación de trabajo y en el índice, debe deshacer cada uno de estos cambios:Esto debería hacer lo que quieras. No afecta a las carpetas principales de su código o índice desprotegido.
Antigua respuesta que no era:
hará el truco y no borrará los cambios no confirmados que haya realizado en sus archivos.
después de eso, debe repetir cualquier
git add
comando que haya puesto en cola.fuente
git alias.co="checkout"
para que segit co
haga el pago.Si no funciona ninguno de los anteriores, puede recuperar datos utilizando la sugerencia de aquí: http://www.spinics.net/lists/git/msg62499.html
fuente
deshacer git rm
deshacer git rm -r
deshacer git rm -rf
Uncommitted changes
incluyenot staged changes
,staged changes but not committed
.fuente
git rm -rf
, ya que eso también puede eliminar archivos no rastreados o montados (solo).git rm -rf file
ygit rm -rf dir
no eliminará ningún archivo sin seguimiento.Si ha confirmado y enviado los cambios, puede hacer esto para recuperar el archivo
fuente
Ya hay algunas buenas respuestas, pero podría sugerir una sintaxis poco utilizada que no solo funciona muy bien, sino que es muy explícita en lo que desea (por lo tanto, no da miedo ni es misterioso)
fuente
Obtener lista de compromiso
Por ejemplo, commit estable tiene hash:
45ff319c360cd7bd5442c0fbbe14202d20ccdf81
fuente
Tuve una situación idéntica. En mi caso la solución fue:
fuente
Con Git 2.23+ (agosto de 2019), el comando adecuado para restaurar archivos (y el índice) debería ser usar ...
git restore
(noreset --hard
o el comando confusogit checkout
)Es decir:
O su forma abreviada:
fuente
Tuve exactamente el mismo problema: estaba limpiando mis carpetas, reorganizando y moviendo archivos. Entré: git rm . y pulsa enter; y luego sentí que mis intestinos se aflojaban un poco. Afortunadamente, no escribí git commit -m "" inmediatamente.
Sin embargo, el siguiente comando
restauró todo y me salvó la vida.
fuente