Ostrzeżenie: nie używaj następującego polecenia, chyba że chcesz stracić nieprzyznaną pracę!
Używanie git reset
zostało wyjaśnione, ale poprosiłeś o wyjaśnienie potokowych poleceń, więc oto:
git ls-files -z | xargs -0 rm -f
git diff --name-only --diff-filter=D -z | xargs -0 git rm --cached
Polecenie git ls-files
wyświetla listę wszystkich plików, o których git wie. Opcja -z
nakłada na nie określony format, oczekiwany format xargs -0
, który następnie się rm -f
na nich wywołuje , co oznacza usunięcie ich bez sprawdzania Twojej zgody.
Innymi słowy, „wyświetl listę wszystkich plików, o których git wie i usuń lokalną kopię”.
Następnie przechodzimy do git diff
, który pokazuje zmiany między różnymi wersjami przedmiotów, o których wie git. Mogą to być zmiany między różnymi drzewami, różnice między kopiami lokalnymi a zdalnymi i tak dalej.
W użytym tutaj znaczeniu pokazuje nieustawione zmiany; pliki, które zmieniłeś, ale jeszcze nie zatwierdziłeś. Ta opcja --name-only
oznacza, że chcesz tylko (pełne) nazwy plików i --diff-filter=D
że interesują Cię tylko usunięte pliki. (Hej, czy nie usunęliśmy po prostu kilku rzeczy?)
To jest następnie przesyłane strumieniowo do tego, xargs -0
co widzieliśmy wcześniej, co git rm --cached
je wywołuje , co oznacza, że są usuwane z pamięci podręcznej, podczas gdy działające drzewo powinno zostać pozostawione w spokoju - poza tym, że właśnie usunąłeś wszystkie pliki z działającego drzewa. Teraz są również usuwane z Twojego indeksu.
Innymi słowy, wszystkie zmiany, etapowe lub niestacjonarne, zniknęły, a twoje drzewo robocze jest puste. Wypłacz się, sprawdź swoje pliki od początku lub ze źródła, i ponownie wykonaj swoją pracę. Przeklnij sadystę, który napisał te piekielne linie; Nie mam pojęcia, dlaczego ktoś chciałby to zrobić.
TL; DR: po prostu wszystko nosiłeś; zacznij od nowa i używaj git reset
od teraz.
rm -f
nie jest poleceniem git i nie ma--cached
opcji. Twoje lokalne pliki zostały usunięte przed wykonaniem,git rm
więc nie sądzę, abyś mógłgit rm
cokolwiek za to winić .