Jak usunąć wiele usuniętych plików w repozytorium Git

Usunąłem niektóre pliki i git status pokazuje jak poniżej.

Zobowiązałem się i popchnąłem.

GitHub nadal pokazuje usunięte pliki w repozytorium. Jak mogę usunąć Pliki z repozytorium 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

Jeśli użyję git rm, daje to następujące

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 

Aktualizuje wszystkie zmiany

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-01 05:18:33

Bądź bardzo ostrożny git rm .; może usunąć więcej niż chcesz. Oczywiście można odzyskać, ale prościej nie trzeba tego robić.

Najprostsze byłoby:

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

Nie możesz używać Shell wildcards, Ponieważ pliki nie istnieją, ale możesz użyć (przynajmniej w Bash):

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

Lub rozważyć:

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

To pobiera wynik git status, nie wyświetla niczego domyślnie (sed -n), ale na liniach zaczynających się # deleted:, pozbywa się # i deleted: i wyświetla to, co zostało; xargs zbiera argumenty i dostarcza je komendzie git rm. Działa to dla dowolnej liczby plików niezależnie od podobieństwa (lub odmienności) nazw.

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-14 20:35:04

Inną wersją odpowiedzi ByScripts jest

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

Spowoduje to usunięcie tylko usuniętych plików z Gita.

Może być również używany do dodawania tylko zmodyfikowanych plików.

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

Te polecenia działają również na gitbash Dla 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/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-04 18:40:24

Zaktualizuj wszystkie wprowadzone zmiany:

git add -u

Usunięte pliki powinny zmienić się z nieakcentowanego (Zwykle koloru czerwonego) na zainscenizowany (zielony). Następnie zatwierdź usunięcie usuniętych plików:

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/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-23 00:45:41

Najlepszym rozwiązaniem, jeśli nie zależy ci na przechowywaniu zmodyfikowanych plików, jest użycie git add -u, Jak mówi mshameers i/lub pb2q .

Jeśli chcesz po prostu usunąć usunięte pliki, ale nie wystawiać żadnych zmodyfikowanych, myślę, że powinieneś użyć argumentu ls-files z opcją --deleted (nie trzeba używać regex lub innych złożonych args/opcji):

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/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-11 12:46:36

Tak, git rm <filename> wyświetli usunięty Stan pliku, gdzie <filename> może być wzorcem 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
#       ...

Wtedy możesz się zaangażować.

git commit -a zrobię to za jednym zamachem, jeśli chcesz.

Możesz również użyć git add -u, Aby przygotować wszystkie zmiany, w tym wszystkie usunięte pliki, a następnie zatwierdzić.

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-14 22:17:03

Gdy mam wiele plików, które usunąłem, które nie są ustawione na commit, możesz git rm je wszystkie w jednym programie za pomocą:

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

Jak już wspomniałem, bądź ostrożny z 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/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-26 02:01:10

Spróbuj tego:

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-01 11:03:30

Możesz użyć

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

Po ręcznym usunięciu plików.

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-25 22:17:27

Możesz utworzyć skrypt powłoki, który usunie wszystkie Twoje pliki po uruchomieniu:

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

Tworzony skrypt to remove.sh i zawiera pełną listę poleceń 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/doraprojects.net/template/agent.layouts/content.php on line 54
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/doraprojects.net/template/agent.layouts/content.php on line 54
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/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-17 03:30:00

Jeśli chcesz usunąć wszystkie z nich używając "git rm". To właśnie robię:

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

To zapytanie wyświetla listę wszystkich plików, które zostały usunięte i usuwa je z repozytorium git. Mam nadzieję, że to pomoże.

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-08 19:38:19

Wbudowana funkcja clean może być również pomocna...

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/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-09 18:51:48

Miałem ten problem z plikami ghost pojawiającymi się w moim repo po usunięciu ich i natknąłem się na to zgrabne polecenie!

git add -A

Jest zasadniczo taki sam jak git add -a i git add -u razem wzięte, ale rozróżnia wielkość liter. Dostałem to z tego zajebistego linka (ten link wskazuje na wersję na archive.org teraz, ponieważ oryginał został przekonwertowany na stronę spam/phishing od czerwca 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/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-29 14:54:48

Oto jak wykryć usunięte pliki i ustawić ich usuwanie jako część następnego commita. Wszystkie rozwiązania w tym wątku mają różne zalety. To rozwiązanie poniżej w szczególności dotyczy problemu nazw plików ze spacjami w nich.

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

Upewnij się, że testujesz to z opcją --dry-run git, zanim uruchomisz ją z następującym:

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

Wyjaśnienie:

git status --porcelain

To drukuje coś w rodzaju D " / ścieżka do folderu / ścieżka do pliku" co dzieje się tylko wtedy, gdy są spacjami w nazwach ścieżek

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

Dopasuj tylko linie zaczynające się od " D "

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

Usuń " D " z przodu każdego łańcucha

tr -d '"'

Usuń cytaty, jeśli istnieją

xargs -I {} git rm '{}'

Zdefiniuj zmienne nazwy pliku jako {} Uruchom nazwę pliku Pod git RM zamkniętą w cudzysłowie, aby upewnić się, że obsługuje nazwy plików ze spacjami.

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-21 19:26:07