Wygląda na to, że Git Stash robi wiele tego, czego chcę, poza tym, że jest to trochę trudne do napisania, ponieważ jeśli nie masz żadnych zmian, git stash; git stash pop
zrobisz coś innego niż zmiany w twoim repozytorium.
Wydaje się, że git stash create
to jest odpowiedź na ten problem i wszystko działa, z wyjątkiem jednej rzeczy… Nie mogę pozbyć się stworzonej skrytki. Czy jest jakiś sposób na pozbycie się skrytki?
Aby w 100% wyjaśnić, co robię:
Utwórz skrytkę:
~/tmp/a(master) $ git stash create
60629375d0eb12348f9d31933dd348ad0f038435
~/tmp/a(master) $ git st
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: b
#
~/tmp/a(master) $ git reset --hard
HEAD is now at 555d572 log message
Użyj skrytki:
~/tmp/a(master) $ git apply 60629375d0eb12348f9d31933dd348ad0f038435
fatal: can't open patch '60629375d0eb12348f9d31933dd348ad0f038435': No such file or directory
~/tmp/a(master) $ git stash apply 60629375d0eb12348f9d31933dd348ad0f038435
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: b
#
Usuń skrytkę: (oprócz tego, że ten ostatni bit nie działa)
~/tmp/a(master) $ git stash drop !$
git stash drop 60629375d0eb12348f9d31933dd348ad0f038435
'60629375d0eb12348f9d31933dd348ad0f038435' is not a stash reference
git apply
bieg w drugim polu kodu w momencie pisania tego tekstu nie zastosował łaty - komunikat o błędzie w danych wyjściowych powiedział ci to. W rzeczywistości próbowałeś utworzyć skrytkę (która nie działała, patrz komentarze poniżej), zastosować skrytkę, która nie została utworzona, a następnie upuścić skrytkę, która nie została utworzona. To dlatego nic nie działało.git stash apply
zadziałała. Dogit apply
próby odczytu lokalnego pliku łaty, które nie istnieje. Szczerze mówiąc, prawdopodobnie nie powinno tam być i nigdy nie mogłoby zadziałać. Kusi mnie, by usunąć to pytanie, ale biorąc pod uwagę, że pomogło tak wielu osobom w obecnej formie, pozostawię je bez zmian.Odpowiedzi:
Aby usunąć normalną skrytkę utworzoną za pomocą
git stash
, chceszgit stash drop
lubgit stash drop stash@{n}
. Zobacz więcej szczegółów.Nie musisz usuwać skrytki utworzonej za pomocą
git stash create
. Z dokumentów:Ponieważ nic nie odwołuje się do zatwierdzenia skrytki, ostatecznie zostanie odebrane śmieci.
Skrytka utworzona za pomocą
git stash
lubgit stash save
jest zapisywanarefs/stash
i można ją usunąć za pomocągit stash drop
. Podobnie jak w przypadku wszystkich obiektów Git, rzeczywista zawartość skrytki nie jest usuwana z komputera, dopóki niegc
wyciszy tych obiektów po ich wygaśnięciu (domyślnie jest to 2 tygodnie później).Starsze skrytki są zapisywane w
refs/stash
rejestrze (trycat .git/logs/refs/stash
) i można je usunąć za pomocągit stash drop stash@{n}
, gdzien
jest pokazany numergit stash list
.źródło
git stash
- nie wiem, czy to faktycznie mapuje,git stash create
czy coś innego. Git jest z pewnością czymś, o czym wciąż się uczę (gdyby nie było, niegit stash create
. Zamiast zapisywać w pliku łaty ze znacznikiem czasu, możesz po prostu pozwolić git reflog zapisać go dla ciebie w niestandardowym ref (nprefs/backup
.). Chciałbym spróbować coś takiego: 1)git stash create
, 2) porównanie tree nowego użytkownika z Stashrefs/backup^{tree}
, 3) jeśli drzewo jest innagit update-ref --create-reflog refs/backup <stash-sha>
. Ostatecznie stare skrytki zapasowe zostaną automatycznie przycięte.git stash drop
nie przyjmuje żadnego parametru - który upuszcza górną skrytkę - ani odniesienia do skrytki, które wygląda:stash@{n}
któren
wyznacza, którą skrytkę upuścić. Nie możesz przekazać identyfikatora zatwierdzenia dogit stash drop
.Upuszczenie zapas będzie zmieniać się
stash@{n}
nazw wszystkich stashes dalej w dół stosu.Nie jestem pewien, dlaczego uważasz, że musisz upuścić skrytkę, ponieważ jeśli używasz
stash create
skrytki, nie tworzona jest pozycja „skrytki”, więc nie ma nic do upuszczenia.źródło
Jeśli masz 100% pewności, że masz tylko jedną skrytkę lub chcesz usunąć wszystkie skrytki (upewnij się
git stash list
, że masz 107%), możesz:... i zapomnij o nich (usuwa wszystkie skrytki).
Uwaga: Dodano tę odpowiedź dla tych, którzy skończyli tutaj, szukając sposobu na usunięcie ich wszystkich (takich jak ja).
źródło
git stash drop
, ponieważ upuszcza ona tylko jedną skrytkę i nie musisz się martwić, że stracisz więcej niż oczekiwano.git stash drop
jak zwykle. Nie jestem pewien, co zrobiłem inaczej. W każdym raziegit stash clear
pracował dla mnie. Nie wiedziałem, że istnieje. +1Z git doc: http://git-scm.com/docs/git-stash
Usuń pojedynczy stan skrytki z listy skrytek. Gdy nie podano, usuwa najnowszą. tzn. w
stash@{0}
przeciwnym razie musi istnieć poprawne odwołanie do dziennika skrytek formularza skrytka @ {}.przykład:
Spowoduje to usunięcie wpisu 5. Aby zobaczyć całą listę ukrytych przedmiotów:
źródło
git stash show stash@{REPLACE_IT_WITH_STASH_INDEX}
przed wykonaniemgit stash drop
. Uwierz mi, zaoszczędzi to wielu kłopotów :)Powinieneś używać
i nie
ponieważ tworzy to skrytkę (która jest zwykłym obiektem zatwierdzania) i zwraca jej nazwę obiektu, bez przechowywania go w dowolnym miejscu w przestrzeni nazw ref. Dlatego nie będą dostępne przy zastosowaniu skrytki.
Użyj
git stash save "some comment"
jest używany, gdy masz nieustawione zmiany, które chcesz replikować / przenieść do innej gałęziUżyj
git stash apply stash@{0}
(zakładając, że zapisany indeks skrytki wynosi 0), jeśli chcesz, aby zapisane (ukryte) zmiany odzwierciedlały bieżącą gałąźzawsze możesz użyć
git stash list
do sprawdzenia wszystkich indeksów składowaniai użyj
git stash drop stash@{0}
(zakładając, że zapisany indeks skrytki wynosi 0 i chcesz go usunąć), aby usunąć określoną skrytkę.źródło
git stash
domyślnie nagit stash save
git stash create
jest przeznaczony do użycia przez skrypty. To jest przypadek użycia OP. Tak więc rekomendowaniegit stash save
może być przydatne w przypadku „normalnych” zastosowań, ale nie w przypadku użycia OP. OP może chcieć rzucić okiem na dokumenty : jest więcej poleceń związanych ze skryptami, na przykładgit stash store
git stash save "message"
dziś powinien przeczytaćgit stash push -m "message"
. Porównajgit commit -m "message"
To też działa
lubić
źródło
Dokument jest tutaj (w języku chińskim), kliknij.
możesz użyć
źródło
git stash create
różni sięgit stash save
w szczególności tym, że formularz tworzenia nie pojawia się na liście i nie można go usunąć, stąd pytanie.źródło