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.
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 .
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..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"
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
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).
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.
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.
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.
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.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.
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.
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.
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)
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
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.
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"
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
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
- Pobierz status plików.
- W przypadku usuniętych plików Wyizoluj nazwę pliku.
- 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
. - przekaż pliki do
git rm
.
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
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.
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.
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.
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.
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ć.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
.
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
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ę
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).
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