2010-07-03 10 views
22

Cuando corro git status, tengo un montón de líneas de la formaRetire todos los archivos borrados de "cambiado pero no se actualiza" en Git

deleted: dir/file.js 

puedo quitar cada una de ellas por separado con git checkout -- dir/file.js, pero debe ser una forma menos laboriosa de hacerlo. (Y sí, sé que debería haber utilizado git rm en el primer lugar ...)

[actualización: Como Mark señala a continuación, git checkout -- realidad restaura un archivo eliminado, mientras que yo había pensado que elimina desde el índice git. Yo estaba un poco desconcertado, porque cuando se ejecuta git status, que dice:

use "git checkout -- <file>..." to discard changes in working directory 

Para mí, "descartar los cambios" no significa "restaurar un archivo eliminado", pero en la terminología git supongo que esto tiene sentido .]

+0

que no entiendo. 'checkout' restaurará estos archivos eliminados pero usted dice que debería haber usado' git rm' en primer lugar para eliminar los archivos. ¿Desea restaurar estos archivos en su árbol de trabajo o eliminarlos del índice, así como su árbol de trabajo? –

+0

También quiero eliminarlos del índice, que es lo que 'git checkout - [filename]' hace, mientras que 'git checkout [filename]' restaura los archivos. –

+0

Eso no está bien, me temo, el '--' en' git checkout - 'es solo una forma de asegurarse de que' 'se interprete como una ruta en lugar del nombre de una rama (o una etiqueta o un commit). Si '' no es el nombre de una rama (& c), ambos formularios que mencione tendrán el mismo efecto: restaurarán el archivo a su estado en el índice. –

Respuesta

36

Como rampion señala, todavía se puede utilizar git rm para organizar el borrado de archivos que ya han sido eliminados en la copia de trabajo (por ejemplo, acaba de git rm dir/file.js en su caso.) Si usted tiene una gran cantidad de estos archivos que aparecen como "borrados:" bajo "cambiado pero no se actualizan", primero habría que git ls-files --deleted produce una lista de estos archivos, y si es así, eliminarlos con:

git ls-files --deleted -z | xargs -0 git rm 
+0

¡Gracias, eso funciona a la perfección! Voy a tener que alias. –

+0

¡Realmente útil! – cool

1

puede todavía git rm después del hecho, pero si lo desea, puede restaurar todos los archivos modificados (incluyendo eliminaciones) a la última revisión con git reset --hard

+0

Tengo un problema con 'git push' colgando en un archivo grande que se eliminó, seguido de todo lo anterior y más. No se muestra en ningún registro de estado. Pero todavía está pendiente de un empujón. ¿Su respuesta solucionaría esto si procedo con un 'git rm' después? – elliotrock

34

Así que, ¿quieres publicar la eliminación de esos archivos? A continuación, utilice

git add -u 
git commit 
+4

Esta es la respuesta correcta – mko

+2

Solo para aclarar por qué prefiero la respuesta que agregué, el problema con 'git add -u' en este caso es que también incluirá otros cambios en los archivos rastreados en el repositorio, en lugar de simplemente las eliminaciones. –

+0

'Edición rechazada de Dialogik:' (Tenga en cuenta que esto también incluirá otros cambios en los archivos rastreados en el repositorio, en lugar de solo las eliminaciones; consulte los comentarios a continuación). –

Cuestiones relacionadas