Advertencia: ¡no use el siguiente comando a menos que quiera perder el trabajo no comprometido!
El uso git reset
se ha explicado, pero también solicitó una explicación de los comandos canalizados, así que aquí va:
git ls-files -z | xargs -0 rm -f
git diff --name-only --diff-filter=D -z | xargs -0 git rm --cached
El comando git ls-files
enumera todos los archivos que git conoce. La opción les -z
impone un formato específico, el formato esperado por ellos xargs -0
, que luego los invoca rm -f
, lo que significa eliminarlos sin verificar su aprobación.
En otras palabras, "enumere todos los archivos que Git conoce y elimine su copia local".
Luego llegamos a git diff
, que muestra los cambios entre las diferentes versiones de elementos que Git conoce. Esos pueden ser cambios entre diferentes árboles, diferencias entre copias locales y copias remotas, etc.
Tal como se usa aquí, muestra los cambios no organizados; los archivos que ha cambiado pero que aún no ha confirmado. La opción --name-only
significa que solo desea los nombres de archivo (completos) y --diff-filter=D
significa que solo está interesado en los archivos eliminados. (Oye, ¿no acabamos de eliminar un montón de cosas?)
Esto luego se canaliza a lo xargs -0
que vimos antes, lo que invoca git rm --cached
en ellas, lo que significa que se eliminan del caché, mientras que el árbol de trabajo debe dejarse solo, excepto que acaba de eliminar todos los archivos de su árbol de trabajo. Ahora también se eliminan de su índice.
En otras palabras, todos los cambios, realizados o no, han desaparecido y su árbol de trabajo está vacío. Llora, revisa tus archivos desde el origen o de forma remota, y vuelve a hacer tu trabajo. Maldice al sádico que escribió estas líneas infernales; No tengo idea de por qué alguien querría hacer esto.
TL; DR: acabas de limpiar todo; comenzar de nuevo y usar git reset
de ahora en adelante.
rm -f
no es un comando git y no tiene una--cached
opción. Sus archivos locales se eliminaron antes de ejecutarlos,git rm
así que no creo que pueda culpar legítimamentegit rm
de nada.