Czy istnieje polecenie git, aby przywrócić wszystkie niezatwierdzone zmiany w działającym drzewie i indeksie, a także usunąć nowo utworzone pliki i foldery?
Czy istnieje polecenie git, aby przywrócić wszystkie niezatwierdzone zmiany w działającym drzewie i indeksie, a także usunąć nowo utworzone pliki i foldery?
Odpowiedzi:
Możesz uruchomić te dwa polecenia:
# Revert changes to modified files.
git reset --hard
# Remove all untracked files and directories.
# '-f' is force, '-d' is remove directories.
git clean -fd
git clean -i
dla trybu interaktywnego.
git merge --abort
.
Jeśli chcesz przywrócić zmiany tylko w bieżącym katalogu roboczym, użyj
git checkout -- .
A przedtem możesz wyświetlić listę plików, które zostaną przywrócone bez podejmowania żadnych działań, aby sprawdzić, co się stanie, za pomocą:
git checkout --
git reset --hard
?
Użyj „git checkout - ...”, aby odrzucić zmiany w katalogu roboczym
git checkout -- app/views/posts/index.html.erb
lub
git checkout -- *
usuwa wszystkie zmiany dokonane w plikach niestacjonarnych o statusie git np
modified: app/controllers/posts.rb
modified: app/views/posts/index.html.erb
git checkout -- *
nie działa dla mnie, chyba że jestem w katalogu, w którym znajdują się zmienione pliki. Aby pobrać wszystkie pliki z całego repozytorium, musisz to zrobićgit checkout -- :/
git checkout -- *
, gwiazda jest zastąpiona przez powłokę, ze wszystkimi plikami i katalogami w bieżącym katalogu. Więc powinien przejść do podkatalogów. Mi to pasuje. Ale dzięki podkreśleniu składni „: /”, która moim zdaniem wydaje się czystsza.
Jednym nietrywialnym sposobem jest uruchomienie tych dwóch poleceń:
git stash
Spowoduje to przeniesienie zmian do skrytki i powrót do stanu HEADgit stash drop
Spowoduje to usunięcie najnowszej skrytki utworzonej w ostatnim poleceniu.fatal: git-write-tree: error building trees Cannot save the current index state
git clean -fd
nie pomogło, pozostały nowe pliki. To, co zrobiłem, to całkowite usunięcie całego działającego drzewa, a następnie
git reset --hard
Zobacz „ Jak wyczyścić mój lokalny katalog roboczy w git? ”, Aby uzyskać porady dotyczące dodania -x
opcji czyszczenia:
git clean -fdx
Uwaga -x
flaga usunie wszystkie pliki ignorowane przez Git, więc bądź ostrożny (zobacz dyskusję w odpowiedzi, do której się odwołuję).
Myślę, że możesz użyć następującego polecenia: git reset --hard
Pamiętaj, że nadal mogą istnieć pliki, które nie wydają się znikać - mogą być nieedytowane, ale git mógł oznaczyć je jako edytowane z powodu zmian CRLF / LF. Sprawdź, czy ostatnio wprowadziłeś jakieś zmiany .gitattributes
.
W moim przypadku dodałem ustawienia CRLF do .gitattributes
pliku i wszystkie pliki pozostały z tego powodu na liście „zmodyfikowanych plików”. Zmiana ustawień atrybutów git spowodowała, że zniknęły.
Jeśli masz niezatwierdzoną zmianę (tylko w kopii roboczej), którą chcesz przywrócić do kopii w ostatnim zatwierdzeniu, wykonaj następujące czynności:
git checkout filename
git rm filename
i to nie działa. error: pathspec 'filename' did not match any file(s) known to git.
git rm
jestgit checkout master -- filename
Git 2.23 wprowadził git restore
polecenie przywracania działających plików drzewa.
https://git-scm.com/docs/git-restore
Aby przywrócić wszystkie pliki w bieżącym katalogu
przywróć git.
Jeśli chcesz przywrócić wszystkie pliki źródłowe C w celu dopasowania do wersji w indeksie, możesz to zrobić
git restore '* .c'
Możesz po prostu użyć następującego polecenia git, które może przywrócić wszystkie niezatwierdzone zmiany dokonane w repozytorium:
git checkout .
Przykład:
ABC@ABC-PC MINGW64 /c/xampp/htdocs/pod_admin (master)
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: application/controllers/Drivers.php
modified: application/views/drivers/add.php
modified: application/views/drivers/load_driver_info.php
modified: uploads/drivers/drivers.xlsx
no changes added to commit (use "git add" and/or "git commit -a")
ABC@ABC-PC MINGW64 /c/xampp/htdocs/pod_admin (master)
$ git checkout .
ABC@ABC-PC MINGW64 /c/xampp/htdocs/pod_admin (master)
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working tree clean
Bezpieczna i długa droga:
git branch todelete
git checkout todelete
git add .
git commit -m "I did a bad thing, sorry"
git checkout develop
git branch -D todelete