2012-09-11 12 views
338

Digamos que tengo un archivo en mi repositorio de git llamado foo.Almacenamiento en etapas Archivos eliminados

Suponer que se ha eliminado con rm (no git rm). Entonces el estado de git mostrará:

Changes not staged for commit: 

    deleted: foo 

¿Cómo realizo esta eliminación de archivo individual?

si trato:

git add foo 

Dice:

'foo' did not match any files. 
+1

¿Ha sido un problema en las versiones antiguas de Git? Hoy en día no parece ser uno, funciona de manera similar a los archivos modificados. – cst1992

Respuesta

375

Uso git rm foo para organizar los archivos para su eliminación. (Esto también eliminará el archivo del sistema de archivos, si no se ha eliminado previamente. Puede, por supuesto, restaurarse desde git, ya que se ha registrado previamente.)

Para organizar el archivo para su eliminación sin eliminarlo del sistema de archivos, use git rm --cached foo

+8

También puede agregar la bandera '--cache' para eliminar archivos solo del repositorio, y dejarlos activados en el sistema de archivos. – Hauleth

+0

¿Cuál sería el proceso para deshacer esta operación, es decir, quitar el escenario del archivo para su eliminación? ¿Es eso posible? – longda

+0

Acabo de responder a mi propia pregunta ... git reset HEAD seguido de un git pago parece hacer el truco! – longda

307

Puede hacer git add -u.

Esto ayudaría si desea eliminar varios archivos, sin hacer git rm para cada uno de ellos.

+35

Sí 'git add -A .' agregará todos los cambios, específicamente quería representar un archivo eliminado. –

+8

Esto agregará todos los archivos modificados; No solo archivos eliminados. – Foreever

+3

Eso es correcto. Más específicamente, presentará todos los cambios en los archivos que ya están rastreados, ya sean eliminados o simplemente modificados. Esto ayuda cuando elimina múltiples archivos y no desea organizarlos individualmente. – Sailesh

6

Puede utilizar

git rm -r --cached -- "path/to/directory"

llevar a cabo un directorio borrado.

21

para añadir todos los archivos borrados listos

git status -s | grep -E '^ D' | cut -d ' ' -f3 | xargs git add --all 

cheque de agradecimiento para asegurarse

git status 

usted debe ser bueno para ir

+2

Confirmando que esto funciona. Creo que la lección aquí es no hacer 'rm ', sino 'git rm ' – DanGordon

+0

Esto funciona de maravilla. Gracias hombre :). –

+0

FYI: cortar espacios causa problemas si alguna ruta tiene espacios en ellos – davis

90

poner en escena todos los archivos borrados manualmente que puede utilizar:

git rm $(git ls-files --deleted) 

Para añadir un alias a este comando como git rm-deleted, ejecute:

git config --global alias.rm-deleted '!git rm $(git ls-files --deleted)' 
+2

la notación $() aparentemente no existe en la consola de Windows bash, lo que lleva a 'opción desconocida \' eliminada) ' –

+1

No creo que esto funcione si tiene espacios en su camino, tampoco. Al menos, no funciona en mi sistema (con zsh). –

+2

¡Funcionó perfectamente para mí! Hice exactamente lo que necesitaba. GRAN apreciación aquí! – RedSands

1

Desde Git 2.0.0, git add también organizar los archivos borrados.

Git 2.0.0 Docs - git-add

< pathspec> ...

archivos para agregar el contenido de. Fileglobs (por ejemplo, * .c) se puede dar para agregar todos los archivos coincidentes. También se puede dar un nombre de directorio principal (por ej. Dir para agregar dir/file1 y dir/file2) para actualizar el índice para que coincida con el estado actual del directorio como un todo (por ejemplo, especificar dir no solo grabará un archivo dir/file1 modificado en el árbol de trabajo, un archivo dir/file2 agregado al árbol de trabajo, pero también un archivo dir/file3 eliminado del árbol de trabajo.Tenga en cuenta que las versiones anteriores de Git solían ignorar los archivos eliminados; use la opción --no-all si desea agregar archivos modificados o nuevos, pero ignore los eliminados.

Cuestiones relacionadas