Pytanie Jak odrzucić niezaprogramowane zmiany w Git?


Jak odrzucić zmiany w kopii roboczej, których nie ma w indeksie?


3869
2017-09-09 19:33


pochodzenie


Zobacz też stackoverflow.com/questions/22620393/... - Cees Timmerman
git-clean usuwa tylko nieprzetworzone pliki z drzewa roboczego git-scm.com/docs/git-clean - Gboyega
Aby wyjaśnić powyższy komentarz Asenara, git-clean -df może być niebezpieczne. Spowoduje to usunięcie lokalnych nieśledzonych plików (np. Objętych plikiem .gitignore) Przeczytaj uważnie poniższe informacje i rozważ wydanie polecenia git. zamiast - jacanterbury
'git clean -df' Uważaj! Próbowałem tego i zgubiłem foldery kluczy, których nie można przywrócić ... O tak! - Gabe Karkanis
uderzanie git status daje sugestię, jak to zrobić! git checkout -- . - Paulo


Odpowiedzi:


Innym szybszym sposobem jest:

git stash save --keep-index

Zawierać --include-untracked jeśli chcesz być dokładny.

Następnie możesz upuścić tę skrytkę za pomocą git stash drop polecenie, jeśli chcesz.


2182
2017-09-09 19:39



I żeby być dokładnym o tym, byś chciał --include-untrackedtakże. - T.J. Crowder
@KarimSamir: Pytanie dotyczy konkretnych zmian nie w indeksie. The git reset Polecenie również odrzuci zmiany w indeksie. - Greg Hewgill
git checkout -. jest znacznie szybszy - Frank
Ani git stash, ani żadnej odmiany git checkout odrzuci niezaprogramowane usunięcia. Według danych wyjściowych git status, prawdziwą poprawną odpowiedzią jest tutaj pewien smak git reset HEAD - Chris Warth
To zanieczyszcza stos skrytek. git checkout -- . wykonuje zadanie za pomocą tylko jednego polecenia. - Felipe Tonello


Dla wszystkich plików niezarządzanych użyj:

git checkout -- .

Aby użyć określonego pliku:

git checkout path/to/file/to/revert

Pamiętaj, aby uwzględnić ten okres na końcu.


4197
2017-09-09 19:37



To wydaje się być kanonicznym sposobem git. tj. dokładnie to, co git mówi, aby zrobić, jeśli wpiszesz git status - ABMagil
Nie działa, jeśli są nieśledzone pliki. Git mówi error: The following untracked working tree files would be overwritten by checkout: .... - Michael Iles
pytanie newbie, co robi "git checkout -." oznacza semantycznie? - kaid
@Ninjack git checkout -- . oznacza to samo co git checkout ., z tym że wyraźnie mówisz o tym, że nie podajesz nazwy oddziału. Obaj mówią kasę wersji HEAD w oddziale, w którym aktualnie pracuję, dla "." lub "./". Jeśli zrobisz git checkout branch-name directory-or-file-name generalnie otrzymujesz wersję HEAD directory-or-file-name na oddział branch-name. - akgill
IMO ten wariant jest niedoskonały, ponieważ nie radzi sobie z sytuacją, gdy zmienione repozytorium nie znajduje się w wersji HEAD w momencie czyszczenia zmian i NIE chcesz go aktualizować do HEAD i chcesz po prostu wyczyścić zmiany. - alexykot


Wygląda na to, że kompletne rozwiązanie to:

git clean -df
git checkout -- .

git clean usuwa wszystkie nieśledzone pliki (ostrzeżenie: podczas gdy nie usunie zignorowanych plików wymienionych bezpośrednio w .gitignore, może usuwać zignorowane pliki znajdujące się w folderach) i git checkout usuwa wszystkie zmiany nieopublikowane.


1615
2017-08-29 18:28



Pozostałe dwie odpowiedzi w rzeczywistości nie działają, ta była. - John Hunt
@dval jest to, ponieważ pierwsze polecenie usunęło pliki z indeksu, a drugie usunęło zmiany nieskasowane (zindeksowanych plików). Więc jeśli nie wprowadziłeś żadnych zmian etapowych, to jest to to samo co powrót do ostatniego zatwierdzenia git reset --hard - Amanuel Nega
posługiwać się -dff jeśli katalog nieśledzony jest klonem git. - accuya
Zachowaj ostrożność, uruchamiając git clean -df. Jeśli nie wiesz, co robi, możesz usunąć pliki, które chcesz zachować, np. Robots.txt, przesłane pliki itp. - ctlockey
Jak powiedział @ctlockey, również pierwsze polecenie usuń katalogi, jeśli składają się tylko z ignorowanych plików... Straciłem całą masę plików konfiguracyjnych w moim projekcie :( Bądź ostrożny. - Maxime Lorant


To sprawdzi bieżący indeks dla bieżącego katalogu, odrzucając wszystkie zmiany w plikach z bieżącego katalogu w dół.

git checkout .

lub to, co sprawdza wszystkie pliki z indeksu, nadpisując pliki drzewa roboczego.

git checkout-index -a -f

274
2018-06-20 10:28



Cześć, jaka jest różnica między git checkout . i git checkout -- .? - Evan Hu
@Evan: Bez różnicy w tym przypadku. - Robert Siemer
@Robert Siemer iw ogólnym przypadku? - RJFalconer
@Evan: złe miejsce do zadawania tego pytania. - Nie ma to związku z kwestią PO i nie ma związku z odpowiedzią tutaj. - Robert Siemer
+1 Jest to PRAWIDŁOWA ODPOWIEDŹ, ponieważ poprawnie obsługuje przypadek, w którym niektóre pliki zostały zainscenizowane i zmiany niesortowane. Zauważ, że to rozwiązanie ODWOŁA nieoprogramowane zmiany; jeśli chcesz je zachować, powinieneś użyć odpowiedzi @ greg-hewgill git stash save --keep-index. - Rhubbarb


git clean -df

Czyści drzewo robocze przez rekursywne usuwanie plików, które nie znajdują się pod kontrolą wersji, począwszy od bieżącego katalogu.

-d: Usuń nieśledzone katalogi oprócz nieśledzonych plików

-f: Siła (może nie być konieczna w zależności od clean.requireForce oprawa)

Biegać git help clean aby zobaczyć instrukcję


210
2017-12-07 13:09



dlaczego ta odpowiedź nie ma wszystkich głosów? odpowiedział w 2011 roku i nadal jest poprawny. - Eugene Braginets


Moim ulubionym jest

git checkout -p

To pozwala selektywnie przywracać porcje.

Zobacz też:

git add -p

82
2017-10-10 12:31



Uwielbiam widzieć rzeczywistą zmianę, zanim zostanie odrzucona. - Penghe Geng
To jest to, czego używam. git checkout -p, a następnie "a", aby zaakceptować wszystko. - Mattis
Nigdy o tym nie myślałem. Że -p dodaje dodatkową dodatkową warstwę bezpieczeństwa. Połącz to z git clean -d aby rzeczywiście odpowiedzieć na PO. - Stephan Henningsen


Ponieważ żadna odpowiedź nie sugeruje dokładnej kombinacji opcji, której używam, oto ona:

git clean -dfx
git checkout .

To jest tekst pomocy online dla użytych git clean opcje:

-d

Usuń nieśledzone katalogi oprócz nieśledzonych plików. Jeśli katalog nieśledzony jest zarządzany przez inne repozytorium Git, nie jest domyślnie usuwany. Posługiwać się -f opcja dwa razy, jeśli naprawdę chcesz usunąć taki katalog.

-f

Jeśli zmienna konfiguracyjna Git clean.requireForce nie jest ustawione na false, Git clean odmówi usunięcia plików lub katalogów, chyba że zostanie podany -f, -n, lub -i. Git odmówi usunięcia katalogów w .git podkatalog lub plik, chyba że drugi -f jest podawany.

-x

Nie używaj reguł ignorowania z .gitignore (za katalog) i $GIT_DIR/info/exclude, ale nadal korzystam z reguł ignorowania podanych z -e opcje. Pozwala to na usunięcie wszystkich nieśledzonych plików, w tym produktów do kompilacji. To może być użyte (prawdopodobnie w połączeniu z git reset), aby utworzyć nieskazitelny katalog roboczy, aby przetestować czystą kompilację.

Również, git checkout . należy zrobić w katalogu głównym repozytorium.


67
2018-04-28 19:46



+1 dla tego rozwiązania. Jeśli chodzi o twoją uwagę, że "git checkout musi być zrobiony w katalogu głównym repo", może powinieneś wspomnieć, że możemy po prostu zrobić git reset --hardzamiast? (który jest faktycznie równoważny z git reset --hard HEAD i powinien działać, niezależnie od tego, który katalog jest aktualny ...) - ErikMD
Także w odniesieniu do pierwszego polecenia git clean -dfx, oto wskazówka, której używam, aby być bezpiecznym przed uruchomieniem: po prostu uruchom git clean -d -x -n wcześniej, aby wyświetlić listę plików do usunięcia, a następnie potwierdź operację, uruchamiając git clean -d -x -f (Wstawiam argument -n, resp. -f w końcu, aby móc szybko zmienić go w terminalu) - ErikMD
Szybko zauważ, że jest to nieodwracalne i jeśli masz pliki w .gitignore stracisz je. Więc rozważ utworzenie kopii zapasowej swojego projektu przed tym. - Rob