Usuwanie wielu plików z repo Git, które zostały już usunięte z dysku

Mam Git repo, z którego usunąłem 4 Pliki rm (nie git rm), a mój status Git wygląda tak:

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

Jak usunąć te pliki z Gita bez konieczności ręcznego przeglądania i dodawania KAŻDEGO pliku w ten sposób:

git rm file1 file2 file3 file4

Idealnie, szukam czegoś, co działa w taki sam sposób jak git add ., jeśli to możliwe.

Author: Nick Volynkin, 2009-01-29

28 answers

Dla Git 1.x

$ git add -u

Mówi to gitowi, aby automatycznie ustawiał śledzone pliki - w tym usuwał wcześniej śledzone pliki.

Dla Git 2.0

Aby ustawić całe działające drzewo:

$ git add -u :/

Aby ustawić tylko bieżącą ścieżkę:

$ 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/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-05 15:10:42
git ls-files --deleted -z | xargs -0 git rm 
To może być to, czego szukasz.. dla mnie działa..
 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/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-01 20:47:55

Możesz użyć

git add -u

Aby dodać usunięte pliki do przechowalni, a następnie zatwierdzić je

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/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-29 17:25:48

Jeśli po prostu uruchomić:

git add -u

Git zaktualizuje swój indeks, aby wiedzieć, że usunięte pliki powinny być częścią następnego commita. Następnie możesz uruchomić "git commit", aby sprawdzić tę zmianę.

Lub, jeśli biegniesz:

git commit -a

Automatycznie przyjmie te zmiany (i wszelkie inne) i zatwierdzi je.

Update : Jeśli chcesz dodać tylko usunięte pliki, spróbuj:

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/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-22 02:53:50

Prawdopodobnie szukasz-A:

git add -A

Jest to podobne do git add-u, ale dodaje również nowe pliki. Jest to mniej więcej odpowiednik komendy addremove hg (chociaż wykrywanie ruchu jest automatyczne).

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

Do stage tylko usunięte pliki:

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

Or (the xargs way):

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

Możesz alias twój preferowany zestaw poleceń do wygodnego późniejszego użycia.

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-16 06:42:47
git rm test.txt

Przed lub po usunięciu pliku.

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-14 00:32:34

Używając git-add z opcjami '-- all ' Lub '-- update ' możesz uzyskać więcej niż chciałeś. Nowe i / lub zmodyfikowane pliki zostaną również dodane do indeksu. Mam konfigurację Bash alias dla kiedy chcę usunąć usunięte pliki z git bez dotykania innych plików:

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

Wszystkie pliki, które zostały usunięte z systemu plików, są dodawane do indeksu jako usunięte.

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-11 11:42:55

Nie żeby to miało znaczenie, ale nie zgadzam się z wybraną odpowiedzią:

git add -u 

... usunie pliki z indeksu, jeśli odpowiednie pliki w drzewie roboczym zostały usunięte, ale będzie również etapować zmodyfikowaną nową zawartość śledzonych plików.

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

... z drugiej strony będzie tylko RM usunięte pliki, które zostały śledzone.

Więc to drugie moim zdaniem jest lepszym rozwiązaniem.
 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/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-09 11:24:42

Jeśli są to jedyne zmiany, możesz po prostu zrobić

git commit -a

Aby zatwierdzić wszystkie zmiany. To będzie obejmować usunięte pliki.

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-29 17:29:39
git ls-files --deleted | xargs git rm 

Jest najlepszą opcją dodawania tylko usuniętych plików.

Oto kilka innych opcji.

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

Git add-u

-u -- aktualizacja Pasuje Tylko do już śledzonych plików w indeksie, a nie do drzewa roboczego. Oznacza to, że nigdy nie będzie wystawiać nowych plików, ale że będzie wystawiać zmodyfikowaną zawartość śledzonych plików i że usunie pliki z indeksu, jeśli odpowiednie pliki w drzewie roboczym zostały usunięte.

Jeśli nie podano, domyślnie "."; innymi słowy, zaktualizuj wszystkie śledzone pliki w bieżącym katalogu i jego podkatalogach.

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-26 12:24:42

To proste rozwiązanie działa dobrze dla mnie:

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/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-06 13:32:13

Jeśli chcesz dodać go do swojego .gitconfig Zrób to:

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

Wtedy wszystko co musisz zrobić to uruchomić:

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/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-25 20:47:58
git ls-files --deleted -z | xargs -0 git rm --cached

Spowoduje to usunięcie wszystkich usuniętych plików, które były wcześniej śledzone przez git, a także zajmie się sprawą, w której Twoje nazwy plików mają spacje.

W zależności od wariantu POSIX, może być konieczne użycie xargs -0 -r: spowoduje to, że xargs będzie z wdziękiem zamykać zawartość null.

Edit: --cached i --deleted flagi są używane jednocześnie w celu zabezpieczenia przed przypadkowym usunięciem plików, które nie zostały jeszcze usunięte.

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-04 20:39:59

Spróbuj.

-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"

Lub

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

Użyj -t, aby sprawdzić, które polecenie jest uruchamiane

Właśnie poprawiłem odpowiedź Virendera, aby zrobić to samo:

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/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-17 15:03:17

Żadne z FLAG git-add nie będzie wyświetlać tylko usuniętych plików; jeśli wszystkie zmodyfikowane pliki są usuwane, to wszystko jest w porządku, ale poza tym, musisz uruchomić git-status i przeanalizować wyjście.

Praca na podstawie odpowiedzi Jeremy ' ego, oto co mam:

git status |  sed -s "s/^.*deleted: //" | grep "\(\#\|commit\)" -v | xargs git rm
  1. Pobierz status plików.
  2. W przypadku usuniętych plików Wyizoluj nazwę pliku.
  3. Usuń wszystkie linie zaczynające się od #s, a także linię statusu, w której było słowo "usunięte"; nie pamiętam, co to był, dokładnie, i nie ma go już, więc być może będziesz musiał zmodyfikować to dla różnych sytuacji. Myślę, że grupowanie wyrażeń może być cechą specyficzną dla GNU, więc jeśli nie używasz gnutils, być może będziesz musiał dodać wiele linii grep -v.
  4. przekaż pliki do git rm.
/ Align = "left" / ..
 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/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-25 23:41:05

To zadziała, nawet jeśli masz dużo plików do przetworzenia:

git ls-files --deleted | xargs git rm

Prawdopodobnie będziesz również chciał się zaangażować komentarzem.

Po szczegóły zobacz: przydatne Skrypty 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/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-24 13:45:17

Jak wspomniano

git add -u

Usuwa pliki do usunięcia, ale także modyfikuje pliki do aktualizacji.

Aby usunąć zmodyfikowane pliki możesz zrobić

git reset HEAD <path>

Jeśli chcesz zachować porządek i czystość swoich commitów.
Uwaga: Może to również usunąć usunięte pliki, więc uważaj na te symbole wieloznaczne.

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-30 16:35:42
git commit -m 'commit msg' $(git ls-files --deleted)

To działało dla mnie po tym, jak już usunąłem pliki.

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-05 14:40:38

I needed the same i użyłem przycisku git gui "stage changed". dodaje również wszystko.

I po "stage changed" zrobiłem "commit"...

Więc mój katalog roboczy jest znowu czysty.

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-15 14:29:42

Możesz użyć git add -u <filenames> tylko do umieszczenia usuniętych plików.

Na przykład, jeśli usunąłeś Pliki templates/*.tpl, Użyj git add -u templates/*.tpl.

The -u jest wymagane, aby odnosić się do plików, które istnieją w repozytorium, ale nie istnieją już w katalogu roboczym. W przeciwnym razie domyślną wartością git add jest szukanie plików w katalogu roboczym, a jeśli podasz pliki, które tam usunąłeś, nie znajdzie ich.

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-07 01:29:28

Coś jak

git status | sed -s "s/^.*deleted: //" | xargs git rm 
Może to zrobić.
 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/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-02 10:25:52

Dodawanie aliasów systemowych do przechowywania usuniętych plików jako polecenie rm-all

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

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

Uwaga

Windows musi mieć zainstalowany bash.

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-19 12:16:55

(Yet another variation)

Chciałem usunąć wszystkie już usunięte pliki z dysku, ale z jednego konkretnego folderu, pozostawiając pozostałe foldery nietknięte. U mnie działa:

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/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-23 10:32:10

Do projektu visual studio

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

Co jest przydatne, gdy usunięta ścieżka do pliku ma spację

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-04 15:34:59

Najbardziej elastycznym rozwiązaniem, jakie dotychczas znalazłem, jest

git cola

I zaznacz wszystkie usunięte pliki, które chcę ustawić.

(zauważ, że zwykle robię wszystko w wierszu poleceń w git, ale git radzi sobie z usuniętymi plikami trochę niezręcznie).

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