Odrzuć Git Stash Pop

137

Zrobiłem git stash pop i teraz mam mnóstwo konfliktów. Popełniłem cały mój ostatni kod przed wprowadzeniem git stash pop, więc czy jest sposób, aby wrócić do ostatniego zatwierdzenia i pozbyć się wszystkich konfliktów i zakodować git stash popwstrzyknięty?

jdog
źródło
Czy nadal chcesz, aby wyskakująca praca została zapisana, czy też nigdy nie chcesz jej więcej oglądać?
jscs
2
Nie, nie chcę tej pracy. Zrobiłem to 4 miesiące temu i nie jestem pewien, co tam jest?
jdog
2
Czy dbasz o rzeczy, które były niezakończone przed schowaniem?
Andrew Marshall,
Te 4 miesiące temu czy te dziś? Chcę tego, co miałem godzinę temu.
jdog
5
Jeśli git stashwystąpią konflikty, gdy ty, git nie usunie skrytki z listy. Więc git reset --hard HEADnie niszczy pękniętej pracy.
jwadsack

Odpowiedzi:

189

To zostało już zadane i odpowiedziano na stackoverflow (zobacz Jak przywrócić repozytorium Git do poprzedniego zatwierdzenia? ), Ale prosta odpowiedź brzmi:

git reset --hard HEAD

To powinno rozwiązać twój problem. Zauważ, że spowoduje to usunięcie wszystkich niezatwierdzonych zmian z repozytorium.

Zwróć uwagę, że jeśli wystąpią konflikty, skrytka zostanie zachowana. Z dokumentów w skrytce :

Zastosowanie stanu może zakończyć się konfliktami; w tym przypadku nie jest usuwany z listy skrytki. Musisz rozwiązać konflikty ręcznie, a następnie zadzwonić git stash dropręcznie.

MichaelMilom
źródło
1
Spowoduje to przywrócenie lokalnego repozytorium do ostatniego zatwierdzenia. Powinieneś być w stanie pushować wszystkie swoje zatwierdzenia (od ostatniego push) bez problemu. Jeśli to nie zadziała, opublikuj wyniki z powrotem do poprzedniego pytania). Powodzenia.
MichaelMilom
30
Ale to spowoduje utratę zapasu
K. Weber
19
@ K.Weber jeśli git stash popspowoduje to konflikt, skrytka nie zostanie usunięta z listy.
Daiwei,
2
Nie jestem pewien, kto zagłosuje za „tak naprawdę nie stracisz swojego zapasu”, właśnie straciłem swój
Anthony
6
Niedużo IMHO rozwiązanie, ponieważ wskazuje, że będzie tracić uncommited zmian.
Ivan P
4

Reset można również wywołać dla określonych plików:

git reset HEAD <filename>...

Nie możesz jednak mocno zresetować pliku. Możesz jednak cofnąć te zmiany przy płatności później:

git checkout -- <filename>...

Twój zapas zostanie zachowany, jak wskazał Luke w odpowiedzi Michaela Miloma.

Jest to przydatne, gdy nie chcesz stracić niezatwierdzonych zmian lokalnych.

Poppolopoppo
źródło
0

Jeśli już nigdy nie chcesz widzieć pracy w wyskakującym schowku, jest to tak proste, jak twardy reset:

git reset --hard HEAD

To mówi gitowi, aby zignorował fakt, że dokonałeś niezatwierdzonych zmian w katalogu roboczym i ustawia katalog roboczy, obszar pomostowy i kieruje się do podanego zatwierdzenia - w tym przypadku istniejącego HEAD, który zawiera całą pracę, którą właśnie się popełniłem.

jscs
źródło