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.
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 .
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í..
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"
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
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).
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.
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.
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.
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.
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.
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.
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.
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)
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
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.
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"
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
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
- Obtener el estado de los archivos.
- Para los archivos eliminados, aísle el nombre del archivo.
- 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
. - Pasa los archivos a
git rm
.
Metiendo esto en un alias de shell ahora...
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
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.
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.
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.
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á.
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.
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.
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
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
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).
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