Cómo eliminar una gran cantidad de archivos sin eliminar el contenido

Resuelto sarat asked hace 13 años • 9 respuestas

Accidentalmente agregué muchos archivos temporales usandogit add -A

Logré eliminar los archivos usando los siguientes comandos y logré eliminar el índice sucio.

git ls-files -z | xargs -0 rm -f
git diff --name-only --diff-filter=D -z | xargs -0 git rm --cached

Los comandos anteriores se enumeran en el archivo git help rm. Pero, lamentablemente, mis archivos también se eliminaron durante la ejecución, a pesar de que había dado la opción de caché. ¿Cómo puedo borrar el índice sin perder el contenido?

También sería útil si alguien pudiera explicar cómo funciona esta operación de tubería.

sarat avatar Aug 18 '11 14:08 sarat
Aceptado

git reset

Si todo lo que quieres es deshacer una ejecución demasiado entusiasta de "git add":

git reset

Sus cambios no se realizarán y estarán listos para que los vuelva a agregar como desee.


NO CORRA git reset --hard.

No sólo eliminará los archivos agregados, sino que también revertirá cualquier cambio que haya realizado en su directorio de trabajo. Sin embargo , si creó algún archivo nuevo en el directorio de trabajo, no los eliminará.

tiz.io avatar Jul 02 '2014 23:07 tiz.io

Si tiene un repositorio impecable (o HEAD no está configurado) [1], simplemente puede

rm .git/index

Por supuesto, esto requerirá que vuelvas a agregar los archivos que deseabas agregar .


[1] Tenga en cuenta (como se explica en los comentarios) que esto generalmente solo sucedería cuando el repositorio es nuevo ("prístino") o si no se han realizado confirmaciones. Más técnicamente, siempre que no haya caja ni árbol de trabajo.

Solo lo dejo más claro :)

sehe avatar Aug 18 '2011 08:08 sehe

actualización 2019

Como lo señalaron otros en preguntas relacionadas (consulte aquí , aquí , aquí , aquí , aquí , aquí, aquí y aquí ), ahora puede eliminar la etapa de un archivo con git restore --staged <file>.

Para eliminar todos los archivos de su proyecto, ejecute lo siguiente desde la raíz del repositorio (el comando es recursivo):

git restore --staged .

Si solo desea eliminar los archivos en un directorio, navegue hasta él antes de ejecutar lo anterior o ejecute:

git restore --staged <directory-path>

Notas

  • git restorese introdujo en julio de 2019 y se lanzó en la versión 2.23.
    Con la --stagedbandera restaura el contenido del árbol de trabajo desde HEAD (por lo que hace lo contrario git addy no elimina ningún cambio).

  • Este es un comando nuevo, pero el comportamiento de los comandos antiguos permanece sin cambios. Entonces, las respuestas anteriores con git reseto git reset HEADsiguen siendo perfectamente válidas.

  • Cuando se ejecuta git statuscon archivos preparados no confirmados, esto es ahora lo que Git sugiere usar para eliminar los archivos (en lugar de git reset HEAD <file>como solía hacerlo antes de v2.23).

prosoitos avatar Jun 25 '2020 06:06 prosoitos