Jak wyczyścić mój lokalny katalog roboczy w Git? [duplikat]

to pytanie ma już odpowiedzi tutaj : Jak usunąć lokalne (nie śledzone) pliki z bieżącego drzewa roboczego Gita (39 odpowiedzi) Zamknięty 6 lat temu .

Jak mogę wyczyścić mój katalog roboczy w Git?

 719
git
Author: Peter Mortensen, 2009-03-23

6 answers

Aby zresetować określony plik do stanu ostatnio zatwierdzonego (aby odrzucić niezatwierdzone zmiany w określonym pliku):

git checkout thefiletoreset.txt

To jest wymienione w git status wyjście:

(use "git checkout -- <file>..." to discard changes in working directory)

Aby zresetować całe repozytorium do ostatniego zatwierdzonego stanu:

git reset --hard

Aby usunąć nie śledzone pliki, Zwykle usuwam wszystkie pliki w kopii roboczej (ale nie .git/ folder!), następnie wykonaj git reset --hard, co pozostawia go tylko z zatwierdzonymi plikami.

Lepszym sposobem jest użycie git clean ( warning : użycie znacznika -x jak poniżej spowoduje usunięcie ignorowanych plików):

git clean -d -x -f

Usunie pliki, w tym katalogi (-d) i pliki ignorowane przez git (-x). Zastąp argument -f argumentem -n, aby wykonać próbę suchą lub -i w trybie interaktywnym, a powie Ci, co zostanie usunięte.

Odpowiednie linki:

 1100
Author: dbr,
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
2019-09-01 12:25:01

Użycie:

git clean -df
Nie jest dobrze reklamowany, ale jest bardzo przydatny. Git Ready ma ładne wprowadzenie do git clean.
 146
Author: Marko,
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
2019-09-01 12:27:39

Wszystkie odpowiedzi do tej pory zachowują lokalne commity. Jeśli jesteś naprawdę poważny, możesz odrzucić wszystkie lokalne commity i wszystkie lokalne edycje wykonując:

git reset --hard origin/branchname

Na przykład:

git reset --hard origin/master

To sprawia, że Twoje lokalne repozytorium dokładnie dopasowuje Stan pochodzenia (inny niż pliki nie śledzone).

Jeśli przypadkowo zrobiłeś to po przeczytaniu komendy, a nie tego, co robi:), użyj git reflog, aby znaleźć swoje stare commity.

 46
Author: dbn,
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-11-14 04:38:57

Możesz utworzyć commit zawierający pustą kopię roboczą.

Jest to ogólnie bezpieczne, nieniszczące podejście, ponieważ nie wymaga użycia żadnych mechanizmów resetowania brute-force. Najpierw ukrywasz wszystkie zarządzane treści za pomocą git checkout empty, a następnie możesz ręcznie przeglądać i usuwać niezarządzane treści.
## create a stand-alone, tagged, empty commit
true | git mktree | xargs git commit-tree | xargs git tag empty

## clear the working copy
git checkout empty

Twoja kopia robocza powinna być teraz wolna od zarządzanych treści. Pozostały tylko niezarządzane pliki i folder .git.

To ponownie wypełnić kopię roboczą...

git checkout master ## or whatever branch you will be using

Jeśli jesteś osobą myślącą przyszłościowo, możesz rozpocząć swoje repozytorium od prawej strony, opierając wszystko na początkowym pustym zatwierdzeniu...

git init
git commit --allow-empty --allow-empty-message -m ""
git tag empty
...

Istnieją różne zastosowania oznaczonego pustego obszaru roboczego. Moim ulubionym w tej chwili jest wyludnienie katalogu głównego pod zestawem podfolderów git worktree.

 13
Author: Brent Bradburn,
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-08-15 00:57:54

Aby przełączyć się na inną gałąź, odrzucając wszystkie niezatwierdzone zmiany (np. wynikające z dziwnej obsługi końcówek linii przez Gita):

git checkout -f <branchname>

Miałem roboczą kopię z setkami zmienionych plików (ale pustych git diff --ignore-space-at-eol), których nie mogłem się pozbyć żadną z poleceń, które tu przeczytałem, i git checkout <branchname> też nie będzie działać-chyba że podano opcję -f (lub --force).

 9
Author: Tobias,
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-10-18 16:02:19

Aby zresetować określony plik, jak sugeruje git status:

git checkout <filename>

Aby zresetować folder

git checkout <foldername>/*
 2
Author: anshuman,
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-21 18:09:29