Cómo eliminar varios archivos eliminados en el repositorio Git


He eliminado algunos archivos y el estado de git se muestra a continuación.

Me he comprometido y empujado.

GitHub todavía muestra los archivos eliminados en el repositorio. ¿Cómo puedo eliminar archivos en el repositorio GitHub?

# On branch master
# Changes not staged for commit:
#   (use "git add/rm <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   deleted:    modules/welcome/language/english/kaimonokago_lang.php
#   deleted:    modules/welcome/language/french/kaimonokago_lang.php
#   deleted:    modules/welcome/language/german/kaimonokago_lang.php
#   deleted:    modules/welcome/language/norwegian/kaimonokago_lang.php

Si utilizo git rm, da lo siguiente.

usage: git rm [options] [--] <file>...

-n, --dry-run         dry run
-q, --quiet           do not list removed files
--cached              only remove from the index
-f, --force           override the up-to-date check
-r                    allow recursive removal
--ignore-unmatch      exit with a zero status even if nothing matched
 224
Author: Nick Volynkin, 2011-05-15

16 answers

git add -u 

Actualiza todos tus cambios

 610
Author: mshameers,
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 05:18:33

Tenga mucho cuidado con git rm .; podría eliminar más de lo que desea. Por supuesto, se puede recuperar, pero es más sencillo no tener que hacerlo.

El más simple sería:

git rm modules/welcome/language/english/kaimonokago_lang.php \
       modules/welcome/language/french/kaimonokago_lang.php \
       modules/welcome/language/german/kaimonokago_lang.php \
       modules/welcome/language/norwegian/kaimonokago_lang.php

No puedes usar comodines de shell porque los archivos no existen, pero puedes usar (al menos en Bash):

git rm modules/welcome/language/{english,french,german,norwegian}/kaimonokago_lang.php

O considere:

git status | sed -n '/^# *deleted:/s///p' | xargs git rm

Esto toma la salida de git status, no imprime nada por defecto (sed -n), pero en las líneas que comienzan # deleted:, se deshace del # y el deleted: y imprime lo que queda; xargs reúne los argumentos y los proporciona a un comando git rm. Esto funciona para cualquier número de archivos independientemente de la similitud (o disimilitud) en los nombres.

 90
Author: Jonathan Leffler,
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-05-14 20:35:04

Otra versión para Bycripts respuesta es

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

Esto SOLO eliminará los archivos eliminados del git.

También se podría usar para agregar SOLO archivos modificados también.

git add $(git ls-files --modified)

Estos comandos también funcionan en gitbash para windows.

 50
Author: Vijay C,
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-07-04 18:40:24

Actualiza todos los cambios realizados:

git add -u

Los archivos eliminados deben cambiar de no escalonados (generalmente de color rojo) a escalonados (verde). A continuación, comprometerse a eliminar los archivos eliminados:

git commit -m "note"
 35
Author: Aziz Alto,
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-04-23 00:45:41

La mejor solución si no le importa organizar los archivos modificados es usar git add -u como lo dicen mshameers y/o pb2q.

Si solo desea eliminar archivos eliminados, pero no realizar ninguna modificación, creo que debe usar el argumento ls-files con la opción --deleted (no es necesario usar expresiones regulares u otros argumentos/opciones complejos):

git ls-files --deleted | xargs git rm
 11
Author: ByScripts,
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-11 12:46:36

Sí, git rm <filename> escenificará el estado eliminado de un archivo, donde <filename> podría ser un patrón glob:

$ git rm modules/welcome/language/*/kaimonokago_lang.php
rm modules/welcome/language/english/kaimonokago_lang.php
rm modules/welcome/language/french/kaimonokago_lang.php
rm modules/welcome/language/german/kaimonokago_lang.php
rm modules/welcome/language/norwegian/kaimonokago_lang.php

$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       deleted:    modules/welcome/language/english/kaimonokago_lang.php
#       ...

Entonces, puedes comprometerte.

git commit -a haré esto de una sola vez, si quieres.

También puede usar git add -u para organizar todos los cambios, incluidos todos los archivos eliminados, y luego confirmar.

 8
Author: Ben James,
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-05-14 22:17:03

Cuando tengo una gran cantidad de archivos que he eliminado que no están configurados para la confirmación, puede git rm todos ellos en un solo show con:

for i in `git status | grep deleted | awk '{print $3}'`; do git rm $i; done

Como el contestador de preguntas mencionó, tenga cuidado con git rm.

 7
Author: Justin Mandzik,
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-06-26 02:01:10

Prueba esto:

 git rm `git ls-files -d`
 5
Author: eludom,
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-10-01 11:03:30

Puede usar

git commit -m "remove files" -a
git push

Después de eliminar archivos manualmente.

 3
Author: onalbi,
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-25 22:17:27

Puede crear un script de shell que eliminará todos sus archivos cuando se ejecute:

git status | grep deleted | awk '{print "git rm " $3;}' > ../remove.sh

El script que se crea es remove.sh y contiene la lista completa de comandos git rm.

 3
Author: La-comadreja,
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-06-26 01:32:56
git status | sed 's/^#\s*deleted:\s*//' | sed 's/^#.*//' | xargs git rm -rf
 2
Author: Boush,
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-11-12 02:12:25
git add -u .

git add --update .
 2
Author: euccas,
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-08-17 03:30:00

Si quieres eliminarlos todos usando "git rm". Esto es lo que hago:

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

Esta consulta enumera todos los archivos que se han eliminado y los elimina de tu repositorio git. Espero que ayude.

 2
Author: DevWL,
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-01-08 19:38:19

La función clean integrada también puede ser útil...

git clean -fd
 1
Author: Randall Borck,
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-09 18:51:48

Tuve este problema de los archivos fantasma que aparecen en mi repositorio después de que los eliminé y me encontré con este comando ordenado!

git add -A

Es esencialmente lo mismo que git add -a y git add -u combinados, pero distingue entre mayúsculas y minúsculas. Lo conseguí de este enlace impresionante (este enlace apunta a la versión en archive.org ahora, debido a que el original se ha convertido en una página de spam / phishing a partir de junio de 2016)

 1
Author: NetOperator Wibby,
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-06-29 14:54:48

Aquí está cómo detectar archivos eliminados y organizar su eliminación como parte de la próxima confirmación. Todas las soluciones en este hilo tienen diferentes méritos. Esta solución a continuación se ocupa específicamente del problema de los nombres de archivo con espacios en ellos.

git status --porcelain | awk '/^.D .*$/ {print $0}' | sed 's/.D \(.*\)/\1/' | tr -d '"' | xargs -I {} git rm '{}'

Asegúrate de probar esto con la opción git dry-run de git antes de ejecutarlo con lo siguiente:

git status --porcelain | awk '/^.D .*$/ {print $0}' | sed 's/.D \(.*\)/\1/' | tr -d '"' | xargs -I {} git rm --dry-run '{}'

Explicación:

git status --porcelain

Esto imprime algo como D " / ruta a una carpeta / ruta a un archivo" que sucede sólo cuando hay son espacios en los nombres de ruta

awk '/^.D .*$/ {print $0}'

Coinciden solo con las líneas que comienzan con "D"

sed 's/ D \(.*\)/\1/'

Eliminar " D " del frente de cada cadena

tr -d '"'

Eliminar las comillas, si las hay

xargs -I {} git rm '{}'

Definir variables de nombre de archivo como {} ejecute nombre de archivo en git rm encerrado entre comillas simples para asegurarse de que admite nombres de archivo con espacios.

 0
Author: N D,
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-21 19:26:07