Almacenamiento provisional de archivos eliminados

499

Digamos que tengo un archivo en mi repositorio git llamado foo.

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

Changes not staged for commit:

    deleted: foo

¿Cómo organizo esta eliminación individual de archivos?

Si lo intento:

git add foo

Dice:

'foo' did not match any files.
Andrew Tomazos
fuente
2
¿Era esto 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

Respuestas:

22

Desde Git 2.0.0, git addtambién se realizarán eliminaciones de archivos.

Documentos de Git 2.0.0 - git-add

<pathpec> ...

Archivos para agregar contenido. Fileglobs (por ejemplo, * .c) se puede asignar para agregar todos los> archivos coincidentes. También se puede dar un nombre de directorio principal (por ejemplo, dir para agregar dir / archivo1 y dir / archivo2) para actualizar el índice para que coincida con el estado actual del directorio en su conjunto (por ejemplo, especificar directorio registrará no solo un archivo dir / archivo1 modificado en el árbol de trabajo, se agregó un archivo dir / file2 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 ignorar los eliminados.

peflorencio
fuente
La respuesta aceptada no resuelve el problema, y ​​las otras son más engorrosas desde Git 2.0.0, ¡esta es la mejor manera! Tienes mi voto a favor
João Antunes
519

Use git rm foopara organizar el archivo para su eliminación. (Esto también eliminará el archivo del sistema de archivos, si no se había eliminado previamente. Por supuesto, se puede restaurar desde git, ya que se registró previamente).

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

Wooble
fuente
8
También puede agregar un --cachemarcador para eliminar el archivo solo del repositorio y dejarlo sin tocar en el sistema de archivos.
Hauleth
¿Cuál sería el proceso para deshacer esta operación, es decir, eliminar la etapa del archivo para su eliminación? ¿Es eso posible?
longda
82
En realidad, OP preguntó cómo organizar el archivo ya eliminado y esto puede hacerse mediante git status | grep 'deleted:' | cut -d':' -f2 | xargs -t -I {} git add -u "{}". Parece que otras respuestas muestran cómo organizar la eliminación de archivos correctamente (pero no cómo organizar los archivos ya eliminados). PD. el xargscomando basado funciona para mí en Ubuntu 12.04, sin embargo, cuando lo hago manualmente git add -u deleted_file.txtno funciona. Mi git es 1.7.9.5
Dimitry K
8
@DimitryK: git rmfelizmente organizará un archivo para su eliminación, incluso si ya se ha eliminado del sistema de archivos. Y como señala el comentario de OP sobre otra respuesta, querían organizar un archivo específico que ya se había eliminado.
Wooble
3
git rmno presenta archivos ya eliminados. Se lanza este error: fatal: pathspec '~.SLDASM' did not match any files. Aquí hay pantallas con prueba: i.imgur.com/cKNKGGe.png i.imgur.com/1p9JdWF.png . La primera captura de pantalla muestra claramente que 2 archivos se eliminan y no se organizan, la segunda captura de pantalla muestra que cuando escribo git rm "~$Box.SLDASM", arroja este error.
KulaGGin
413

A pesar de que es correcto de usar git rm [FILE], alternativamente, podría hacerlo git add -u.

De acuerdo con la git-adddocumentación:

-u --actualizar

Actualice el índice justo donde ya tiene una entrada que coincida con [FILE]. Esto elimina y modifica las entradas de índice para que coincidan con el árbol de trabajo, pero no agrega archivos nuevos.

Si no se proporciona [ARCHIVO] cuando se usa la opción -u, se actualizan todos los archivos rastreados en todo el árbol de trabajo (las versiones antiguas de Git se usaban para limitar la actualización al directorio actual y sus subdirectorios).

Sobre el cual se actualizará el índice y los archivos se organizarán correctamente.

Sailesh
fuente
56
git add -A .agregará todos los cambios, específicamente quería organizar un archivo eliminado.
Andrew Tomazos
25
Esto agregará todos los archivos modificados; No solo archivos borrados.
Foreever
3
Eso es correcto. Más específicamente, organizará todos los cambios en los archivos que ya están rastreados, ya sea eliminados o simplemente modificados. Esto ayuda cuando elimina varios archivos y no desea organizarlos individualmente.
Sailesh
99
¿Hay alguna manera de organizar solo archivos eliminados y no modificados? Sólo curioso.
agosto
11
Hice git add -u FolderWithDeletedFiles/e hice lo que quería, gracias
Parlamento
158

Para organizar todos los archivos eliminados manualmente, puede usar:

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

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

git config --global alias.rm-deleted '!git rm $(git ls-files --deleted)'
Ian Mackinnon
fuente
2
la notación $ () aparentemente no existe en ventanas golpear la consola, lo que lleva aunknown option `deleted)
Félix Gagnon-Grenier
2
No creo que esto funcione si tienes espacios en tu camino, tampoco. Al menos, no lo hace en mi sistema (con zsh).
Wil Shipley
3
¡Funcionó perfectamente para mí! Hice exactamente lo que necesitaba. ENORME agradecimiento aquí!
RedSands
En windows dofor /F %I in ('git ls-files --deleted') do git add -u %I
eis
3
esto no funciona para nombres de archivo con espacios, 'git add -u' si es necesario.
J-Dizzle
33

agregar todos los archivos eliminados listos

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

gracias comprobar para asegurarse

git status

Usted debe ser bueno para ir

chet corey
fuente
55
Confirmando que esto funciona. Creo que la lección aquí es no hacer rm <file>, sino más biengit rm <file>
DanGordon
1
FYI: cortar espacios causa problemas si alguna ruta tiene espacios en ellos
davis
1
esto no funciona para nombres de archivo con espacios, 'git add -u' si es necesario.
J-Dizzle
Funciona perfectamente para mí git version 2.15.2 (Apple Git-101.1).
Kalob Taulien
funciona perfectamente en la consola de linux!
Ahmed AMMOURI
8

Puedes usar

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

para organizar un directorio eliminado.

GameScripting
fuente
8

Puedes usar este comando

git add  `git ls-files --deleted`
gnana jeyam95
fuente
0

para aquellos que usan git 2.x + en powershell:

foreach ($filePath in (git ls-files --deleted)) { git add "$filePath" }
orion elenzil
fuente