Wykonuję git skrytkę zapisując "ABC" i przez pomyłkę zrobiłem gash ukrywkę. Jak mogę odzyskać dane znajdujące się w skrytce ABC. Pomóc proszęJak cofnąć wyczyść git
Odpowiedz
Jak można je znaleźć w the documentation of git stash, można mieć szczęście, jeśli to działa:
Odzyskiwanie stashes które zostały wyczyszczone/spadła błędnie
Jeśli przez pomyłkę spadnie lub wyraźne stashes, nie mogą odzyskać normalne mechanizmy bezpieczeństwa. Możesz jednak wypróbować następującą inkantację, aby uzyskać listę skrytek, które wciąż znajdują się w repozytorium, ale nie można ich już uzyskać:
git fsck --unreachable | grep commit | cut -d \ -f3 | xargs git log --merges --no-walk --grep = WIP
Jeśli znajdziesz zapas wyczyszczonych przez pomyłkę, to można zrobić:
git stash apply <stash>
EDIT: Użyj to polecenie zamiast: git fsck --unreachable | grep commit | cut -d ' ' -f3 | xargs git log --merges --no-walk --grep=WIP
Usunąłem również skrytkę, ale używając guita GitKraken, więc nie wiem dokładnie, co polecenie git wykonało. Wybrana odpowiedź nie zadziałała, ale przynajmniej postaw mnie na dobrej drodze.
W moim przypadku zadziałało ręczne przeszukiwanie - nieosiągalne obiekty. Jestem pewien, że jest bardziej efektywny sposób, ale cieszę się, że udało mi się odzyskać te zmiany.
ids=`git fsck --unreachable | grep blob | cut -d ' ' -f3`
number_of_ids=`echo $ids | wc -l | tr -d '[:space:]'`
for i in {1..$number_of_ids}; do git show `echo $ids | sed -n ${i}p` > evaluate$i.rb;done;
W ten sposób zapisuje wszystkie nieosiągalne obiekty w plikach z prefiksem "oceń". Następnie otworzyłem wszystkie pliki w edytorze tekstów (podniosły dla mnie subl evaluate*
) i oceniłem każdy plik po kolei, ręcznie kopiując i wklejając plik do starej wersji oryginalnego pliku, jeśli był to plik ze skrytki, którą usunąłem.
Porady:
- Zmiany
.rb
dopasować rozszerzenie pliku z plików szukasz, aby uzyskać odpowiednie podświetlanie składni, jeśli chcesz. - Jeśli twoje pliki nie są dołączone, możesz rozszerzyć zakres wyszukiwania, usuwając
| grep blob
(plamy były tam, gdzie znalazłem moje pliki).
To nie działa :( –
@AshishBanker: To zniknęło, niech to będzie dla ciebie lekcja. Nie używaj 'git stash' do przechowywania zmian, które cię interesują, użyj' git commit', nawet jeśli jest częściowe.Możesz zawsze "git commit --amend" i "git rebase -i' później. –
Na OSX:' '' git fsck --unreachable | grep commit | cut -d '' -f3 | xargs git log - scala --no-walk --grep = WIP''' –