Jak wyczyścić mój lokalny katalog roboczy w Git? [duplikat]
Jak mogę wyczyścić mój katalog roboczy w Git?
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:
- git-reset strony man
- git-clean man page
- git ready "czyszczenie nie śledzonych plików" (jak napisał Marko)
- pytanie o przepełnienie stosu "Jak usunąć lokalne (nie śledzone) pliki z bieżącego drzewa roboczego Gita")
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
.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.
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
.
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
).
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>/*
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