Mam repozytorium Git, z którego usunąłem cztery pliki rm
( nie git rm
), a mój status Git wygląda następująco:
# deleted: file1.txt
# deleted: file2.txt
# deleted: file3.txt
# deleted: file4.txt
Jak usunąć te pliki z Git bez konieczności ręcznego przechodzenia i dodawania każdego pliku w ten sposób:
git rm file1 file2 file3 file4
Idealnie szukam czegoś, co działa w ten sam sposób git add .
, jeśli to możliwe.
git
git-commit
git-add
git-rm
Codebeef
źródło
źródło
git rm
, usunięcie mogło być z oddzielnego narzędzia, IDE lub menedżera plików. Visual Studio dla jednego może być uciążliwe podczas usuwania / zmiany nazw plików.git rm
przypomina trochę pytanie, dlaczego nie używagit vim
lubgit cd
. To głupia rzecz do zrobienia, a git powinien mieć wbudowane polecenie lub alias do usuwania usuniętych plików ze środowiska przemieszczania, i nie powinieneś szukać go na SO ani czytać stron podręcznika podczas przerwy na lunch.Odpowiedzi:
Dla Git 1.x
Mówi to gitowi, aby automatycznie przeprowadzał etapy śledzenia plików - w tym usuwanie wcześniej śledzonych plików.
Dla Git 2.0
Aby wystawić całe działające drzewo:
Aby ustawić tylko bieżącą ścieżkę:
źródło
git add -u folder/
aby uruchomić tę operację w folderzemoże być tym, czego szukasz ... to działa dla mnie ..
źródło
git ls-files --deleted -z | xargs -0 git rm
Możesz użyć
Aby dodać usunięte pliki do obszaru przejściowego, a następnie zatwierdz je
źródło
Jeśli po prostu uruchomisz:
git zaktualizuje swój indeks, aby wiedzieć, że usunięte pliki powinny faktycznie być częścią następnego zatwierdzenia. Następnie możesz uruchomić polecenie „git commit”, aby sprawdzić tę zmianę.
Lub jeśli uruchomisz:
Automatycznie weźmie te zmiany (i wszelkie inne) i zatwierdzi je.
Aktualizacja : jeśli chcesz tylko usunąć usunięte pliki, spróbuj:
źródło
git commit -a
zrobię to, co chcę, z wyjątkiem niektórych przypadków, że mam pliki, których nie chcę zatwierdzać, więc chcę przygotować zatwierdzenie ręcznie.Prawdopodobnie szukasz -A:
jest to podobne do git add -u, ale dodaje także nowe pliki. Jest to mniej więcej odpowiednik
addremove
polecenia hg (chociaż wykrywanie ruchu odbywa się automatycznie).źródło
Aby ustawić tylko usunięte pliki:
Lub (sposób xargs):
Możesz ustawić swój preferowany zestaw aliasów w celu późniejszego wygodnego użycia.
źródło
xargs
opanowanie zajmuje około 15 minut.git status | awk '/deleted/ {print $3}' | xargs git rm
byłby to krótszy sposób.grep | awk
... Po prostu powiedz nie.git rm $(git ls-files --deleted)
nie jest to wygodniejsze (skopiowane z tego ).git ls-files --deleted | while read f; do git rm $f; done
xargs
jest prawdopodobnie bardziej wydajna niż pętla while dla ogromnej listy, ponieważ za każdym razem przekazuje więcej niż jeden argumentgit rm
. Aby ograniczyć liczbę argumentów przekazywanych dogit rm
każdego wykonania, użyj-n
opcji:git ls-files --deleted | xargs -n 15 git rm
Przed lub po usunięciu rzeczywistego pliku.
źródło
rm
i żałuję później.git add -u
? Wydaje się, że bezpieczniej byłoby dodać określone pliki, które zostały usunięte do zatwierdzenia, niż dodawać WSZYSTKIE zmiany.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ę aliasu bash, gdy chcę usunąć usunięte pliki z git bez dotykania innych plików:
Wszystkie pliki, które zostały usunięte z systemu plików, są dodawane do indeksu jako usunięte.
źródło
To nie ma znaczenia, ale nie zgadzam się z wybraną odpowiedzią:
... usunie pliki z indeksu, jeśli odpowiednie pliki w drzewie roboczym zostały usunięte, ale także przygotuje zmodyfikowaną nową zawartość śledzonych plików.
... z drugiej strony będą zapisywać tylko usunięte pliki, które były śledzone.
Moim zdaniem ta druga opcja jest lepszą opcją.
źródło
Jeśli to jedyne zmiany, możesz po prostu to zrobić
zatwierdzić wszystkie zmiany. Obejmuje to usunięte pliki.
źródło
jest najlepszą opcją dodawania tylko usuniętych plików.
Oto kilka innych opcji.
źródło
git add -u
-u --update Dopasowuje 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 będzie wystawiał zmodyfikowaną nową zawartość śledzonych plików i usunie pliki z indeksu, jeśli odpowiednie pliki z drzewa roboczego zostaną usunięte.
Jeśli nie, nie, domyślnie „.”; innymi słowy, zaktualizuj wszystkie śledzone pliki w bieżącym katalogu i jego podkatalogach.
źródło
git add -u
. Skąd biorą się wszystkie inne elementy twojej odpowiedzi, dokumentacja? Powinieneś połączyć się z dokumentacją i cytować ją, jeśli tak jest.To proste rozwiązanie działa dla mnie dobrze:
źródło
Jeśli chcesz to dodać,
.gitconfig
zrób to:Następnie wystarczy uruchomić:
źródło
git config --global alias.rmd '!git ls-files --deleted -z | xargs -0 git rm'
Spowoduje to usunięcie wszystkich usuniętych plików, które były wcześniej śledzone przez git, a także zajmie się przypadkiem, w którym w nazwach plików znajdują się spacje.
W zależności od wariantu POSIX może być konieczne użycie
xargs -0 -r
: spowoduje toxargs
to płynne zamknięcie, gdy potokowana zawartość będzie pusta.EDYCJA:
--cached
i--deleted
flagi są używane w tandemie, aby zabezpieczyć się przed przypadkowym usunięciem plików, które nie zostały jeszcze usunięte.źródło
Powiedz tej komendzie, aby automatycznie ustawiała pliki, które zostały zmodyfikowane i usunięte, ale nie dotyczy to nowych plików, o których nie powiedziałeś Gitowi:
lub
źródło
Następujące elementy będą działać, nawet jeśli masz wiele plików do przetworzenia:
Prawdopodobnie będziesz również chciał zatwierdzić komentarz.
Aby uzyskać szczegółowe informacje, zobacz: Przydatne skrypty Git
źródło
Proszę użyć
-t
aby zobaczyć, które polecenie jest faktycznie uruchamianeWłaśnie poprawiłem odpowiedź Virender, aby zrobić to samo:
źródło
Żadna z flag, które należy dodać do git-add, nie wystawi tylko usuniętych plików; jeśli wszystko, co zmodyfikowałeś, to usunięte pliki, wszystko w porządku, ale w przeciwnym razie musisz uruchomić git-status i przeanalizować dane wyjściowe.
Na podstawie odpowiedzi Jeremy'ego otrzymałem:
grep -v
wierszy.git rm
.Umieszczenie tego w aliasie powłoki teraz ...
źródło
Jak wspomniano
etapy usuwa pliki do usunięcia, ALE TAKŻE zmodyfikował pliki do aktualizacji.
Aby cofnąć scenę ze zmodyfikowanych plików, możesz to zrobić
jeśli chcesz utrzymać swoje porządki i porządek.
UWAGA: Mogłoby to również spowodować usunięcie usuniętych plików, więc uważaj na te symbole wieloznaczne.
źródło
To działało dla mnie po tym, jak już usunąłem pliki.
źródło
Potrzebowałem tego samego i użyłem przycisku „zmiana sceny” git gui. dodaje również wszystko.
A po „zmianie sceny” dokonałem „zatwierdzenia” ...
więc mój katalog roboczy jest ponownie czysty.
źródło
Usuwa wszystkie pliki wymienione w
git ls-files
poleceniu (-d pokazuje tylko usunięte pliki). Nie działa w przypadku plików ze spacjami w nazwie pliku lub ścieżce, ale jest łatwy do zapamiętaniaźródło
Możesz użyć
git add -u <filenames>
do ustawienia tylko usuniętych plików.Na przykład, jeśli usunąłeś pliki
templates/*.tpl
, użyjgit add -u templates/*.tpl
.Jest
-u
to wymagane w celu odniesienia do plików, które istnieją w repozytorium, ale nie istnieją już w katalogu roboczym. W przeciwnym razie domyślniegit add
jest szukanie plików w katalogu roboczym, a jeśli określisz pliki, które tam usunąłeś, nie będzie ich znaleźć.źródło
Dodanie aliasu systemowego do przemieszczania usuniętych plików jako polecenia
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 być
bash
zainstalowany.źródło
(Jeszcze inna odmiana)
Chciałem usunąć wszystkie już usunięte z plików na dysku, ale z jednego określonego folderu, pozostawiając pozostałe foldery nietknięte. Dla mnie działało:
źródło
coś jak
może to zrobić.
źródło
git diff --diff-filter=D --name-only | xargs git rm
Dla projektu studia wizualnego
co jest przydatne, gdy ścieżka do usuniętego pliku ma miejsce
źródło
Najbardziej elastycznym rozwiązaniem, jakie do tej pory znalazłem, jest
I wybierz wszystkie usunięte pliki, które chcę wystawić.
(Uwaga: Zazwyczaj wszystko robię z linii poleceń w git, ale git radzi sobie z nieco usuniętymi plikami).
źródło
git add -u path/to/my/deleted-files-pattern-*.yml
więc była to dla mnie najlepsza odpowiedź (nie chcąc wystawiać wszystkich usuniętych plików, ale 50 na kilkaset).