Eliminar varios archivos de un repositorio Git que ya se han eliminado del disco


Tengo un repositorio Git del que he eliminado cuatro archivos usando rm (no git rm), y mi estado de Git se ve así:

#    deleted:    file1.txt
#    deleted:    file2.txt
#    deleted:    file3.txt
#    deleted:    file4.txt

Cómo elimino estos archivos de Git sin tener que ir manualmente y agregar cada archivo de esta manera:

git rm file1 file2 file3 file4

Idealmente, estoy buscando algo que funcione de la misma manera que git add ., si eso es posible.

Author: Nick Volynkin, 2009-01-29

28 answers

Para Git 1.x

$ git add -u

Esto le dice a git que actualice automáticamente los archivos rastreados, incluida la eliminación de los archivos rastreados anteriormente.

Para Git 2.0

Para organizar todo tu árbol de trabajo:

$ git add -u :/

Para organizar solo la ruta actual:

$ git add -u .
 2221
Author: carl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-08-05 15:10:42
git ls-files --deleted -z | xargs -0 git rm 

Podría ser lo que estás buscando.. funciona para mí..

 1337
Author: Varinder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-01 20:47:55

Puedes usar

git add -u

Para agregar los archivos eliminados al área de preparación, luego confirmarlos

git commit -m "Deleted files manually"
 726
Author: Cody Caughlan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-01-29 17:25:48

Si simplemente ejecuta:

git add -u

Git actualizará su índice para saber que los archivos que has eliminado deberían formar parte de la próxima confirmación. Luego puedes ejecutar "git commit" para verificar ese cambio.

O, si ejecuta:

git commit -a

Tomará automáticamente estos cambios (y cualquier otro) y los confirmará.

Actualizar : Si solo desea agregar archivos eliminados, intente:

git ls-files --deleted -z | xargs -0 git rm
git commit
 354
Author: Emil Sit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-22 02:53:50

Probablemente estás buscando-A:

git add -A

Esto es similar a git add-u, pero también agrega nuevos archivos. Esto es aproximadamente el equivalente del comando addremove de hg (aunque la detección de movimiento es automática).

 163
Author: Dustin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-01-29 18:10:14

Para organizar solo los archivos eliminados:

for x in $(git status | grep deleted | awk '{print $2}'); do git rm $x; done

O (el camino xargs):

git status | awk '/deleted/ {print $2}' | xargs git rm

Puede alias su comando preferido para un uso posterior conveniente.

 92
Author: Saeb Amini,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-16 06:42:47
git rm test.txt

Antes o después de eliminar el archivo real.

 60
Author: Peaker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-14 00:32:34

Al usar git-add con las opciones 'all all' o 'update update' puede obtener más de lo que quería. También se agregarán archivos nuevos y / o modificados al índice. Tengo una configuración de alias bash para cuando quiero eliminar archivos eliminados de git sin tocar otros archivos:

alias grma='git ls-files --deleted -z | xargs -0 git rm'

Todos los archivos que se han eliminado del sistema de archivos se agregan al índice como eliminados.

 48
Author: zobie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-01-11 11:42:55

No es que realmente importe, pero no estoy de acuerdo con la respuesta elegida:

git add -u 

... eliminará archivos del índice si se han eliminado los archivos correspondientes en el árbol de trabajo, pero también escenificará el nuevo contenido modificado de los archivos rastreados.

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

... por otro lado solo rm los archivos eliminados que fueron rastreados.

Así que esta última, en mi opinión, es la mejor opción.

 38
Author: Stephan Tual,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-04-09 11:24:42

Si esos son los únicos cambios, simplemente puede hacer

git commit -a

Para confirmar todos los cambios. Eso incluirá archivos eliminados.

 28
Author: SpoonMeiser,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-01-29 17:29:39
git ls-files --deleted | xargs git rm 

Es la mejor opción para agregar solo archivos eliminados.

Aquí hay algunas otras opciones.

git add .  => Add all (tracked and modified)/new files in the working tree.

git add -u => Add all modified/removed files which are tracked.

git add -A => Add all (tracked and modified)/(tracked and removed)/new files in the working tree.

git commit -a -m "commit message" - Add and commit modified/removed files which are tracked.
 19
Author: Sijo Kurian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-01 19:36:48

Git add-u

- u --actualizar Solo coinciden con los archivos ya rastreados en el índice en lugar del árbol de trabajo. Esto quiere decir que nunca creará nuevos archivos, sino que creará nuevos contenidos modificados de archivos rastreados y que eliminará archivos del índice si se han eliminado los archivos correspondientes en el árbol de trabajo.

Si no se da, el valor predeterminado es "."; en otras palabras, actualizar todos los archivos rastreados en el directorio actual y sus subdirectorios.

 15
Author: Obay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-08-26 12:24:42

Esa solución simple funciona bien para mí:

git rm $(git ls-files --deleted)
 14
Author: Husam Bdr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-06 13:32:13

Si quieres añadirlo a tu .gitconfig haz esto:

[alias]
  rma = !git ls-files --deleted -z | xargs -0 git rm

Entonces todo lo que tienes que hacer es ejecutar:

git rma
 10
Author: Evan Moran,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-07-25 20:47:58
git ls-files --deleted -z | xargs -0 git rm --cached

Esto eliminará todos los archivos eliminados que fueron rastreados previamente por git, así como manejará el caso en el que sus nombres de archivo tengan espacios en ellos.

Dependiendo de su variante POSIX, es posible que necesite usar xargs -0 -r: esto hará que xargs salga con gracia cuando se canalice contenido nulo.

EDITAR: --cached y --deleted banderas se utilizan en tándem para proteger contra la eliminación accidental de archivos que no se han eliminado ya.

 8
Author: Murphy Danger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-04 20:39:59

Pruébalo.

-a
--all
Tell the command to automatically stage files that have been modified and deleted, but new files you have not told Git about are not affected.

git add . && git commit -m -a "Your commit"

O

git add --all && git commit -m "Your commit"
 6
Author: ilgam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-09 15:05:17

Utilice -t para ver qué comando se está ejecutando realmente

Acabo de ajustar la respuesta de Virender para hacer lo mismo:

git ls-files --deleted -z | xargs -t -0 git rm
 6
Author: Venkateswara Rao,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-17 15:03:17

Ninguna de las banderas de git-add solo pondrá en escena los archivos eliminados; si todo lo que ha modificado son archivos eliminados, entonces está bien, pero de lo contrario, necesita ejecutar git-status y analizar la salida.

Trabajando con la respuesta de Jeremy, esto es lo que obtuve:

git status |  sed -s "s/^.*deleted: //" | grep "\(\#\|commit\)" -v | xargs git rm
  1. Obtener el estado de los archivos.
  2. Para los archivos eliminados, aísle el nombre del archivo.
  3. Eliminar todas las líneas que comienzan con #s, así como una línea de estado que tenía la palabra "eliminado" en ella; no recuerdo lo que era, exactamente, y ya no está allí, por lo que puede que tenga que modificar esto para diferentes situaciones. Creo que agrupar expresiones podría ser una característica específica de GNU, por lo que si no está utilizando gnutils, puede que tenga que agregar varias líneas grep -v.
  4. Pasa los archivos a git rm.

Metiendo esto en un alias de shell ahora...

 5
Author: Xiong Chiamiov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-07-25 23:41:05

Lo siguiente funcionará, incluso si tiene muchos archivos que procesar:

git ls-files --deleted | xargs git rm

Probablemente también quieras hacer commit con un comentario.

Para obtener más información, consulte: Útiles Scripts de Git

 5
Author: l3x,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-05-24 13:45:17

Como se mencionó

git add -u

Prepara los archivos eliminados para su eliminación, PERO TAMBIÉN los archivos modificados para su actualización.

Para eliminar los archivos modificados puede hacer

git reset HEAD <path>

Si te gusta mantener tus commits organizados y limpios.
NOTA: Esto también podría unstage los archivos borrados, así que cuidado con los comodines.

 4
Author: DarkNeuron,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-30 16:35:42
git commit -m 'commit msg' $(git ls-files --deleted)

Esto funcionó para mí después de que ya había eliminado los archivos.

 4
Author: Chad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-08-05 14:40:38

Necesitaba lo mismo y utiliza el botón git gui "stage changed". también añade todo.

Y después de "stage changed" hice "commit" ...

Así que mi directorio de trabajo está limpio de nuevo.

 3
Author: Serdar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-11-15 14:29:42

Puede usar git add -u <filenames> solo para organizar los archivos eliminados.

Por ejemplo, si eliminó los archivos templates/*.tpl, use git add -u templates/*.tpl.

El -u es necesario para hacer referencia a los archivos que existen en el repositorio pero que ya no existen en el directorio de trabajo. De lo contrario, el valor predeterminado de git add es buscar los archivos en el directorio de trabajo, y si especifica los archivos que ha eliminado allí, no los encontrará.

 2
Author: thomasrutter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-07 01:29:28

Algo como

git status | sed -s "s/^.*deleted: //" | xargs git rm 

Puede hacerlo.

 1
Author: Jeremy French,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-12-02 10:25:52

Agregar alias de sistema para almacenar archivos eliminados como comando rm-all

UNIX alias rm-all='git rm $(git ls-files --deleted)'

VENTANAS doskey rm-all=bash -c "git rm $(git ls-files --deleted)"

Nota

Windows necesita tener bash instalado.

 1
Author: Haris Krajina,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-19 12:16:55

(otra variación)

Quería eliminar todos los archivos ya eliminados de los archivos de disco, pero de una carpeta específica, dejando las otras carpetas intactas. Lo siguiente funcionó para mí:

git ls-files --deleted  | grep <folder-name> | xargs git rm
 1
Author: urban,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-23 10:32:10

Para el proyecto visual studio

'git ls-files --deleted | sed 's/(.*)/"\1"/'| xargs git rm' 

Que es útil cuando la ruta del archivo eliminado tiene espacio

 0
Author: Sawyer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-04 15:34:59

La solución más flexible que he encontrado hasta la fecha es

git cola

Y seleccione todos los archivos eliminados que quiero poner en escena.

(Tenga en cuenta que normalmente hago todo en línea de comandos en git, pero git maneja los archivos eliminados un poco incómodos).

 -2
Author: Broes De Cat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-03 14:28:18