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
16 answers
git add -u
Actualiza todos tus cambios
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.
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.
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"
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
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.
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
.
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`
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.
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
.
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
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 .
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.
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
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)
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.
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