Jak przywrócić "git rm-r"?

Przypadkowo powiedziałem git rm -r .. Jak po tym wyzdrowieć?

Nie popełniłem tego.

Myślę, że wszystkie pliki zostały oznaczone do usunięcia i zostały fizycznie usunięte z mojej lokalnej kasy.

EDIT: mógłbym (gdybym znał komendę) powrócić do ostatniego commita. Ale byłoby o wiele lepiej, gdybym mógł po prostu cofnąć git rm -r .. Ponieważ nie jestem do końca pewien, co zrobiłem po ostatnim commicie i przed git rm -r ..

 311
Author: BuZZ-dEE, 2010-01-24

11 answers

git reset HEAD

Powinien to zrobić. Jeśli nie masz żadnych niezarejestrowanych zmian, na których Ci zależy, to

git reset --hard HEAD

Powinien przymusowo zresetować wszystko do ostatniego commita. Jeśli masz niezarejestrowane zmiany, ale pierwsze polecenie nie działa, Zapisz niezarejestrowane zmiany za pomocą git stash:

git stash
git reset --hard HEAD
git stash pop
 398
Author: Brian Campbell,
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
2010-01-24 02:56:49

Wykonałem git - rm kilka plików i zacząłem wprowadzać zmiany przed następnym commitem, kiedy zdałem sobie sprawę, że potrzebuję części z tych plików z powrotem. Zamiast przechowywać i resetować, możesz po prostu sprawdzić poszczególne pliki, które przegapiłeś / usunąłeś, jeśli chcesz:

git checkout HEAD path/to/file path/to/another_file

Pozostawia to inne niezakontraktowane zmiany nienaruszone bez obejścia.

 212
Author: Jaime Bellmyer,
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
2016-11-17 19:41:26

Aby odzyskać pojedyncze pliki lub foldery można użyć następującego

git reset -- path/to/file
git checkout -- path/to/file

Spowoduje to odtworzenie wpisów indeksu dla path/to/file i odtworzenie pliku tak, jak był w ostatnim zatwierdzeniu, tzn. HEAD.

Podpowiedź: można przekazać hash commita do obu komend, aby odtworzyć pliki ze starszego commita. Zobacz git reset --help i git checkout --help Po szczegóły.

 45
Author: Arne L.,
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-01-19 14:54:06

Aktualizacja:

Ponieważ git rm . usuwa wszystkie pliki w katalogach this I child w roboczej kasie, a także w indeksie, musisz cofnąć każdą z tych zmian:

git reset HEAD . # This undoes the index changes
git checkout .   # This checks out files in this and child directories from the HEAD
To powinno robić, co chcesz. Nie ma to wpływu na foldery nadrzędne Twojego kodu pobranego lub indeksu.

Stara odpowiedź, która nie była:

reset HEAD

Wykona sztuczkę i nie usunie niezakontraktowanych zmian dokonanych w plikach.

Potem musisz powtórzyć wszelkie git add polecenia, które ustawiłeś w kolejce.

 24
Author: Alex Brown,
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
2012-06-14 22:53:23

Jeśli żadne z powyższych nie zadziała, możesz być w stanie pobrać dane za pomocą sugestii z tego miejsca: http://www.spinics.net/lists/git/msg62499.html

git prune -n
git cat-file -p <blob #>
 22
Author: Skippy VonDrake,
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
2012-11-28 17:39:23

Jeśli zatwierdziłeś i wypchnąłeś zmiany, możesz to zrobić, aby odzyskać plik

// Replace 2 with the # of commits back before the file was deleted.
git checkout HEAD~2 path/to/file
 9
Author: Cory Danielson,
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
2015-01-29 21:49:01

Jest 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 ,co chcesz (nie jest przerażająca lub tajemnicza)

git checkout <branch>@{"20 minutes ago"} <filename>
 7
Author: mehtunguh,
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-09-28 17:00:13

Undo git RM

git rm file             # delete file & update index
git checkout HEAD file  # restore file & index from HEAD

Undo git rm-R

git rm -r dir          # delete tracked files in dir & update index
git checkout HEAD dir  # restore file & index from HEAD

Undo git rm-rf

git rm -r dir          # delete tracked files & delete uncommitted changes
not possible           # `uncommitted changes` can not be restored.

Uncommitted changes zawiera not staged changes, staged changes but not committed.

 4
Author: song xu,
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-02-06 03:06:57

Pobierz listę commit

git log  --oneline

Na przykład, stabilny commit ma hash: 45ff319c360cd7bd5442c0fbbe14202d20ccdf81

git reset --hard 45ff319c360cd7bd5442c0fbbe14202d20ccdf81
git push -ff origin master
 3
Author: Do Nhu Vy,
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
2016-09-30 13:37:48

Miałem identyczną sytuację. W moim przypadku rozwiązaniem było:

git checkout -- .
 0
Author: Artur,
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
2014-08-14 11:11:47

Miałem dokładnie ten sam problem: czyściłem foldery, przestawiałem i przenosiłem pliki. Wpisałem: git RM . i wcisnąć enter; a potem poczuł moje jelita poluzować trochę. Na szczęście nie wpisałem od razu w git commit-m"".

Jednak poniższe polecenie

git checkout .
Przywróciła wszystko i uratowała mi życie.
 -1
Author: Wai-Ming Lee,
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
2016-07-27 10:09:49