Jak wspomniał @bentolo, możesz ręcznie usunąć pliki, na które narzeka, zmienić gałęzie, a następnie ręcznie dodać je z powrotem. Ale ja osobiście wolę pozostać „w gicie”.
Najlepszym sposobem na to jest przekształcenie skrytki w gałąź. Gdy jest to gałąź, możesz normalnie pracować w git, używając normalnych technik / narzędzi związanych z gałęziami, które znasz i lubisz. W rzeczywistości jest to użyteczna ogólna technika pracy ze skrytkami, nawet jeśli nie masz wymienionego błędu. Działa dobrze, ponieważ skrytka naprawdę jest zatwierdzeniem pod okładkami (patrz PS).
Przekształcenie skrytki w gałąź
Poniższe polecenie tworzy gałąź na podstawie HEAD, gdy skrytka została utworzona, a następnie stosuje ją (nie zatwierdza jej).
git stash branch STASHBRANCH
Praca z „stash branch”
To, co zrobisz dalej, zależy od relacji między skrytką a miejscem, w którym znajduje się twoja docelowa gałąź (którą nazwałem ORIGINALBRANCH).
Opcja 1 - Odbuduj gałąź skrytki normalnie (dużo zmian od czasu skrytki)
Jeśli dokonałeś wielu zmian w swoim ORIGINALBRANCH, prawdopodobnie najlepiej będzie traktować STASHBRANCH jak każdy lokalny oddział. Zatwierdź zmiany w STASHBRANCH, zmień bazę na ORIGINALBRANCH, a następnie przełącz się na ORIGINALBRANCH i ponownie bazuj / scal zmiany STASHBRANCH na nim. Jeśli występują konflikty, postępuj z nimi normalnie (jedną z zalet tego podejścia jest to, że możesz zobaczyć i rozwiązać konflikty).
Opcja 2 - Zresetuj oryginalną gałąź, aby pasowała do skrytki (ograniczone zmiany od czasu skrytki)
Jeśli po prostu schowałeś, zachowując kilka etapowych zmian, a następnie zatwierdziłeś, a wszystko, co chcesz zrobić, to uzyskać dodatkowe zmiany, które nie zostały wprowadzone w fazie przechowywania, możesz wykonać następujące czynności. Powróci do oryginalnej gałęzi i indeksu bez zmiany kopii roboczej. Efektem końcowym będą dodatkowe zmiany w skrytce w kopii roboczej.
git symbolic-ref HEAD refs/heads/ORIGINALBRANCH
git reset
tło
Skrytki to zatwierdzenia, polubienia gałęzi / tagów (nie łatki)
PS, Kuszące jest myślenie o skrytce jako o łatce (tak jak o zatwierdzeniu jako o łatce), ale skrytka jest w rzeczywistości zatwierdzeniem przeciwko HEAD, kiedy została stworzona. Kiedy aplikujesz / wyskakujesz, robisz coś podobnego do wybierania wiśniowego w swojej bieżącej gałęzi. Pamiętaj, że gałęzie i tagi są tak naprawdę tylko odniesieniami do zatwierdzeń, więc pod wieloma względami skrytki, gałęzie i tagi są po prostu różnymi sposobami wskazywania na zatwierdzenie (i jego historię).
Czasami potrzebne, nawet jeśli nie wprowadziłeś zmian w katalogu roboczym
PPS, możesz potrzebować tej techniki po prostu używając skrytki z opcją --patch i / lub --include-untracked. Nawet bez zmiany katalogów roboczych te opcje mogą czasami tworzyć skrytkę, której nie można po prostu ponownie zastosować. Muszę przyznać, że nie do końca rozumiem, dlaczego. Zobacz http://git.661346.n2.nabble.com/stash-refuses-to-pop-td7453780.html, aby zapoznać się z dyskusją.