git checkout wszystkie pliki

127

Jak mogę pozbyć się wszystkich zmian we wszystkich plikach mojego repozytorium?

Powiedzmy, że jestem w branży i dokonałem pewnych zmian. git statuszwraca zestaw plików w polu „Zmiany nie zostały wprowadzone do zatwierdzenia” i zauważam, że chciałbym pozbyć się wszystkich tych zmian we wszystkich plikach. Jak mogę to zrobić jednym poleceniem?

Wiem, że mogę wykonać następujące czynności, aby pobrać tylko jeden plik:

git checkout -- <file>

Zauważyłem, że git checkout --sam zwraca listę wszystkich niezaakceptowanych plików. Jednak nie mogę znaleźć sposobu, aby sprawdzić je wszystkie, coś w stylu git checkout --all.

Sprawdziłem man git checkouti nic nie znalazłem. Widziałem również Git: Checkout wszystkie pliki oprócz jednego i próbowałem git checkout .i też nie działało.

Czy musiałbym to zrobić programowo, przechodząc przez git checkout --wyjście?

fedorqui 'SO przestań szkodzić'
źródło

Odpowiedzi:

194

Jeśli jesteś w katalogu głównym swojego katalogu roboczego, możesz git checkout -- .wyewidencjonować wszystkie pliki w bieżącym HEAD i zastąpić pliki lokalne.

Możesz także git reset --hardzresetować katalog roboczy i zastąpić wszystkie zmiany (w tym indeks).

szturchać
źródło
czy te dwie opcje są równoważne (jeśli zresetujemy do HEAD)?
lucidbrot
10
Nie, są pewne różnice. Na przykład git checkout -- .zresetuje tylko zmiany stanu indeksu. Więc jeśli już dodałeś pliki do indeksu, do tego zostanie zresetowany. Z drugiej strony git reset --hardrównież wyrzuci indeks, więc na przykład jeśli masz nieśledzone pliki dodane do indeksu (aby rozpocząć ich śledzenie), zostaną one również usunięte. git checkoutumożliwia również przywrócenie katalogu roboczego tylko częściowo, przekazując bardziej szczegółową ścieżkę, która może być bardzo przydatna.
szturchnij
4
@poke Cześć Poke, jestem pewien, że git checkout -. nie działa. Wypróbowałem to dla wielu niestopowanych zmian.
Aman
2
inne polecenia, aby osiągnąć ten sam rezultat: git checkout --force,git reset --hard
Tjalling
3

Innym sposobem, który uznałem za przydatny, jest:

git checkout <wildcard> 

Przykład:

git checkout *.html

Bardziej ogólnie:

git checkout <branch> <filename/wildcard>
Singhak
źródło
1
Jeśli globbing jest włączony w twojej powłoce i znajdują się nieśledzone pliki w katalogu roboczym, to się nie powiedzie, chyba że zmienisz gwiazdkę, np . git checkout \*Lub git checkout '*'.
Josh Cooley