Przypadkowo powiedziałem git rm -r .
. Jak mogę się z tego zrezygnować?
Nie zobowiązałem się.
Myślę, że wszystkie pliki zostały oznaczone do usunięcia, a także zostały fizycznie usunięte z mojej lokalnej kasy.
EDYCJA: Mógłbym (gdybym znał polecenie) powrócić do ostatniego zatwierdzenia. Ale byłoby znacznie lepiej, gdybym mógł po prostu cofnąć git rm -r .
. Ponieważ nie jestem do końca pewien, co zrobiłem po ostatnim zatwierdzeniu i przed git rm -r .
.
-f
dogit rm
gita, nie usuniesz żadnych plików, które miały zmiany etapowe lub niestacjonarne, więcgit reset; git checkout .
powinieneś wszystko odzyskać.git restore
:git restore -s@ -SW -- .
. Zobacz moją odpowiedź poniżej .Odpowiedzi:
Powinien to zrobić. Jeśli nie masz żadnych niezatwierdzonych zmian, na których ci zależy
powinien siłą zresetować wszystko do ostatniego zatwierdzenia. Jeśli masz niezatwierdzone zmiany, ale pierwsze polecenie nie działa, zapisz swoje niezatwierdzone zmiany za pomocą
git stash
:źródło
git reset --hard HEAD
niszczy wszelkie przydatne zmiany, które wprowadziłeś w katalogach nadrzędnych bieżącego katalogu roboczego.Dostałem kilka plików i zacząłem wprowadzać zmiany przed kolejnym zatwierdzeniem, kiedy zdałem sobie sprawę, że potrzebuję niektórych z tych plików. Zamiast ukrywać i resetować, możesz po prostu sprawdzić poszczególne pliki, które zostały pominięte / usunięte, jeśli chcesz:
Pozostawia to Twoje inne niezatwierdzone zmiany bez zmian.
źródło
git rm
a nie cały cykl rekurencyjnygit rm -r
. W przypadku pełnego rekurencyjnego usuwania inne rozwiązania mogą być lepsze, w zależności od liczby usuniętych plików.Aby odzyskać niektóre pojedyncze pliki lub foldery, można użyć następujących
To najpierw odtworzy wpisy indeksu
path/to/file
i odtworzy plik tak, jak był w ostatnim zatwierdzeniu, tjHEAD
.Wskazówka: do obu poleceń można przesłać skrót zatwierdzenia, aby odtworzyć pliki ze starszego zatwierdzenia. Zobacz
git reset --help
igit checkout --help
szczegóły.źródło
git rm
operacji bez usuwania innych niezamierzonych zmian.Aktualizacja:
Ponieważ
git rm .
usuwa wszystkie pliki z tego i podrzędnych katalogów w działającym kasie, a także w indeksie, musisz cofnąć każdą z tych zmian:To powinno zrobić, co chcesz. Nie wpływa to na foldery nadrzędne wyrejestrowanego kodu lub indeksu.
Stara odpowiedź, która nie była:
zrobi to samo i nie usunie żadnych niezatwierdzonych zmian , które wprowadziłeś w swoich plikach.
potem musisz powtórzyć wszystkie
git add
polecenia, które ustawiłeś w kolejce.źródło
git alias.co="checkout"
tak, abygit co
kasę.Jeśli żadna z powyższych czynności nie zadziała, być może będziesz w stanie odzyskać dane, korzystając z sugestii dostępnej tutaj: http://www.spinics.net/lists/git/msg62499.html
źródło
cofnij git rm
cofnij git rm -r
cofnij git rm -rf
Uncommitted changes
obejmujenot staged changes
,staged changes but not committed
.źródło
git rm -rf
, ponieważ może to również usunąć pliki bez śledzenia lub przemieszczane (tylko).git rm -rf file
igit rm -rf dir
nie usunie żadnych nieśledzonych plików.Jeśli zatwierdziłeś i wypchnąłeś zmiany, możesz to zrobić, aby odzyskać plik
źródło
Istnieje już kilka dobrych odpowiedzi, ale mogę zasugerować mało używaną składnię, która nie tylko działa świetnie, ale jest bardzo wyraźna w tym, czego chcesz (w związku z tym nie jest przerażająca ani tajemnicza)
źródło
Pobierz listę zatwierdzeń
Na przykład hash stabilnego zatwierdzenia:
45ff319c360cd7bd5442c0fbbe14202d20ccdf81
źródło
Miałem identyczną sytuację. W moim przypadku rozwiązaniem było:
źródło
W Git 2.23+ (sierpień 2019 r.) Właściwym poleceniem przywracania plików (i indeksu) byłoby użycie ...
git restore
(niereset --hard
lub mylącegit checkout
polecenie )To jest:
Lub jego skrócona forma:
źródło
Miałem dokładnie ten sam problem: czyściłem moje foldery, przestawiałem i przenosiłem pliki. Wszedłem: git rm . i naciśnij enter; i poczułam, jak moje wnętrzności się trochę rozluźniają. Na szczęście nie wpisałem od razu git commit -m.
Jednak następujące polecenie
przywrócił wszystko i uratował mi życie.
źródło