2010-04-19 11 views
7

Si está usando Git desde la línea de comandos, ¿hay alguna manera de eliminar de un solo golpe todos los archivos que se eliminarán en la lista Modificado pero no actualizado? En lugar de hacer elimina manualmente usando comodines.Git - rm equivalente para "agregar."?

+0

Tenga en cuenta que 'git commit -a' hará que todos los archivos rastreados que se eliminaron también se eliminen en commit. Solo para tu información. –

+0

'git commit -a' solo agrega archivos, es lo que la mayoría de las personas, incluido yo mismo, hemos estado usando. La respuesta es 'git commit -A'. ¡Organizará los elementos que se agregarán Y los elementos de la etapa para su eliminación al mismo tiempo! Vea la respuesta de Sujoy a continuación. –

Respuesta

3

Los archivos que se muestran como eliminados en la sección de estado "Modificado pero no actualizado" se eliminan del árbol de trabajo pero no del índice. Poner en escena la supresión en el índice (es decir, eliminar el archivo de índice) que puede hacer:

git diff -z --name-only --diff-filter=D | git update-index --remove -z --stdin 

--diff-filter=D muestra sólo las diferencias en el índice que son archivos borrados, --name-only sólo imprime su nombre y -z utiliza NUL a nombres de archivos separados para que no tenga que preocuparse por los nombres de archivos con líneas nuevas incorporadas. update-index luego elimina los archivos dados del índice.

Si tiene una versión de xargs que soporta -0 entonces usted podría hacer el un poco más simple:

git diff -z --name-only --diff-filter=D | xargs -0 git rm 
+0

Gracias, eso funcionó. – Steve

4

Bueno, los archivos enumerados en Modificados pero no actualizados ya están en el índice. Puede descartar sus cambios utilizando git checkout .
Para eliminar archivos que son nuevos, pero que no se han agregado al índice, puede usar git clean.
Pero para eliminar archivos que están modificados y en el índice ... bueno, no hay una solución fácil, probablemente tenga que usar una combinación de git rm y git ls-files.

EDIT:
git ls-files -m debe listar los archivos que está buscando. Combinarlo con git rm y ya está:

git-ls files -m | xargs git rm // NOT TESTED 

EDIT:
probablemente no he entendido bien una parte de su pregunta. Mi solución eliminará todos los archivos enumerados en Modificado pero no actualizado. Si desea eliminar los archivos enumerados como eliminados, debe usar git diff como muestra Charles Bailey en su respuesta.

+0

Gracias. Entonces, ¿cómo combinarías? git rm Steve

+0

'git ls-files -m' enumera todos los archivos modificados, no solo los eliminados. No creo que quiera eliminar todos los archivos modificados, solo los eliminados del árbol de trabajo. –

+0

@Charles: sí, tienes razón, y así es como entendí la pregunta. Pero probablemente tengas razón y eso no es lo que quiere el OP ... obtuve mi +1 por recogerlo – tanascius

8

Lo que sigue debe organizar todos los archivos, ya sea eliminado o no, en el índice:

git add -A 
+1

Esta es la respuesta rápida que estoy seguro que todos están buscando. –

Cuestiones relacionadas