Zawsze miałem wrażenie, że możesz nadać skrytce nazwę, robiąc to git stash save stashname
, co później możesz złożyć git stash apply stashname
. Ale wydaje się, że w tym przypadku wszystko, co się stanie, stashname
zostanie użyte jako opis skrytki.
Czy nie ma sposobu na nazwanie skrytki? Jeśli nie, to co byś polecił, aby osiągnąć równoważną funkcjonalność? Zasadniczo mam małą skrytkę, którą chciałbym okresowo stosować, ale nie chcę zawsze musieć polować, git stash list
jaka jest jej rzeczywista liczba.
git stash push -m stashname
jest bieżącą składnią .git stash save stashname
został wycofany.Odpowiedzi:
Tak to się robi:
Gdzie
"my_stash"
jest nazwa skrytki.Kilka bardziej przydatnych rzeczy, które warto wiedzieć: Wszystkie skrytki są przechowywane w stosie. Rodzaj:
Spowoduje to wyświetlenie wszystkich twoich skrytek.
Aby zastosować skrytkę i usunąć ją ze stosu skrytki, wpisz:
Aby zastosować skrytkę i zachować ją w stosie, wpisz:
Gdzie
n
jest indeks ukrytej zmiany.źródło
git stash apply <custom-name>
git stash push -m my_stash
jest bieżącą składnią .git stash save my_stash
został wycofany.git stash save
jest przestarzałe od 2.15.x / 2.16, zamiast tego możesz użyćgit stash push -m "message"
Możesz użyć tego w następujący sposób:
git stash push -m "message"
gdzie „wiadomość” jest notatką dla tego skrytki.
W celu odzyskania zapas można użyć:
git stash list
. Spowoduje to wyświetlenie takiej listy, na przykład:Następnie wystarczy
apply
podaćstash@{index}
:Odnośniki Strona podręcznika git stash
źródło
push
zamiastsave
składni: git stash pushgit stash push
: stackoverflow.com/a/47231547/6309git stash apply stash@{1}
Powershell, otrzymaszerror: unknown switch 'e'
zwrot. Zamiast tego użyjgit stash apply --index 1
lubgit stash apply 'stash@{1}'
lub ucieczki}
i{
za pomocą backticka `.Możesz zmienić skrytkę w gałąź, jeśli uważasz, że jest to wystarczająco ważne:
ze strony podręcznika:
Spowoduje to utworzenie i sprawdzenie nowej gałęzi o nazwie
<branchname>
zaczynającej się od zatwierdzenia, w którym<stash>
został pierwotnie utworzony, zastosowanie zmian zarejestrowanych w<stash>
nowym drzewie roboczym i indeksie, a następnie upuszczenie<stash>
jeśli zakończy się pomyślnie. Gdy nie<stash>
podano, stosuje się najnowszą.Jest to przydatne, jeśli gałąź, na której działałeś
git stash save
, zmieniła się na tyle, że zastosowanie git stash nie powiedzie się z powodu konfliktów. Ponieważ skrytka jest nakładana na zatwierdzenie, które było HEAD w czasie uruchamiania skrytki git, przywraca pierwotnie ukryty stan bez żadnych konfliktów.Później możesz zmienić bazę tej nowej gałęzi w inne miejsce, które jest potomkiem miejsca, w którym byłeś, kiedy się ukryłeś.
źródło
git stash apply
)git stash push -m 'name'
pracowałJeśli szukasz lekkiego sposobu na zapisanie niektórych lub wszystkich bieżących zmian kopii roboczej, a następnie ich późniejsze zastosowanie, rozważ plik łatki:
Co jakiś czas zastanawiam się, czy powinienem do tego używać skrytek, a potem widzę takie rzeczy jak szaleństwo powyżej i jestem zadowolony z tego, co robię :)
źródło
Skrytki nie mają być trwałymi rzeczami, jak chcesz. Prawdopodobnie lepiej byłoby Ci użyć tagów na zatwierdzeniach. Zbuduj coś, co chcesz schować. Dokonaj zatwierdzenia z tego. Utwórz tag dla tego zatwierdzenia. Następnie wycofaj swój oddział do
HEAD^
. Teraz, gdy chcesz ponownie zastosować tę skrytkę, możesz użyćgit cherry-pick -n tagname
(-n
jest--no-commit
).źródło
named commit
gdzieś spędzać wolny czas. Jedyną łagodną irytacją jest to, że nie zostaje popełnione przy wyborze cherry i pozostaje w diff, co oznacza, że nie będzie trzeba go ręcznie sprawdzać podczas następnego zatwierdzania.--no-stage
opcję! Powiązane: stackoverflow.com/questions/32333383/...użyj,
git stash push -m aNameForYourStash
aby go zapisać. Następnie użyj,git stash list
aby poznać indeks skrytki , którą chcesz zastosować. Następnie użyj,git stash pop --index 0
aby otworzyć zapas i zastosować go.Uwaga: używam gita w wersji 2.21.0.windows.1
źródło
git stash {push,save}
Mam dwie funkcje w moim
.zshrc
pliku:Używając ich w ten sposób:
źródło
A co z tym?
źródło
git stash apply stash^{/<regex>}
nie działa (nie działa faktycznie przeszukaj listę skrytek, zobacz komentarze pod zaakceptowaną odpowiedzią ).git stash list
która pokazuje mi skrytki wraz z powiązanym z nimi numerem indeksu, a następnie Idę 2.git stash apply 0
- gdzie 0 to numer indeksu, którego szukałbym od pierwszego poleceniaAlias
sapply = "!f() { git stash apply \"$(git stash list | awk -F: --posix -vpat=\"$*\" \"$ 0 ~ pat {print $ 1; exit}\")\"; }; f"
Stosowanie
git sapply "<regex>"
Edycja: Trzymałem się mojego oryginalnego rozwiązania, ale rozumiem, dlaczego większość wolałaby wersję Etana Reisnera (powyżej). Tak dla przypomnienia:
źródło
awk -F: '{print $1}'
całkowicie wyeliminuje potrzebę sed. Także po co zawijać to w funkcję? Używanieawk -F: -vpat="$*" '$0 ~ pat {print $1}'
powinno również pozwolić na upuszczenie grep. Chociaż może wymagać nieco innego cytowania wzoru.{print $1; exit}
aby zakończyć po pierwszej dopasowanej linii.To niefortunne, że
git stash apply stash^{/<regex>}
nie działa (tak naprawdę nie przeszukuje listy skrytek, zobacz komentarze pod zaakceptowaną odpowiedzią ).Oto zamienniki drop-in, które wyszukują
git stash list
według wyrażenia regularnego, aby znaleźć pierwszą (najnowszą),stash@{<n>}
a następnie przekazać ją dogit stash <command>
:Zwróć uwagę, że zwracane są odpowiednie kody wynikowe, dzięki czemu możesz używać tych poleceń w innych skryptach. Można to zweryfikować po uruchomieniu poleceń za pomocą:
Uważaj tylko na exploity zmiennej ekspansji, ponieważ nie byłem pewien tej
--grep=$1
części. Powinno tak być,--grep="$1"
ale nie jestem pewien, czy to przeszkadzałoby w ogranicznikach wyrażeń regularnych (jestem otwarty na sugestie).źródło
Ta odpowiedź wiele zawdzięcza Klemenowi Slavičowi. Chciałbym właśnie skomentować zaakceptowaną odpowiedź, ale nie mam jeszcze wystarczającej liczby przedstawicieli :(
Możesz także dodać alias git, aby znaleźć odnośnik do skrytki i użyć go w innych aliasach do pokazu, zastosowania, upuszczenia itp.
Zauważ, że powodem tego
ref=$( ... ); echo ${ref:-<no_match>};
wzorca jest to, że pusty łańcuch nie jest zwracany, co spowodowałoby, że sshow, sapply i sdrop celowały w najnowszą skrytkę zamiast zawieść, jak można by oczekiwać.źródło
Alias Może to być bardziej bezpośrednia składnia dla systemów uniksopodobnych bez konieczności enkapsulacji w funkcji. Dodaj następujące elementy do ~ / .gitconfig w [alias]
Zastosowanie: sapply regex
Przykład: git sshow MySecretStash
Myślnik na końcu mówi, że pobiera dane ze standardowego wejścia.
źródło
Użyj małego skryptu bash, aby sprawdzić numer skrytki. Nazwij to „gitapply”:
Stosowanie:
... gdzie foo jest podciągiem nazwy skrytki, którą chcesz.
źródło
Posługiwać się
git stash save NAME
aby zapisać.Następnie ... możesz użyć tego skryptu, aby wybrać, który chcesz zastosować (lub pop):
Lubię widzieć nazwy skrytek i wybierać. Używam również Zshell i szczerze mówiąc nie wiedziałem, jak używać niektórych z powyższych aliasów Bash;)
Uwaga: Jak mówi Kevin, powinieneś zamiast tego używać tagów i cherry-picks.
źródło
git stash save
jest przestarzałe na korzyśćgit stash push
.Jest to jeden ze sposobów osiągnięcia tego za pomocą PowerShell:
Więcej informacji tutaj
źródło
w mojej skorupce rybnej
posługiwać się
gsap name_of_stash
źródło
Późno na imprezę tutaj, ale jeśli używasz VSCode, szybkim sposobem na to jest otwarcie palety poleceń (CTRL / CMD + SHIFT + P) i wpisanie „Pop Stash”, będziesz mógł odzyskać swoją skrytkę według nazwy bez potrzeby używania git CLI
źródło
git stash apply
działa również z innymi numerami niżstash@{0}
. Możesz więc użyć zwykłych tagów, aby uzyskać trwałą nazwę. Ma to również tę zaletę, że nie można przypadkowogit stash drop
lubgit stash pop
inaczej.Możesz więc zdefiniować alias
pstash
(zwany „trwałym ukrytym”) w następujący sposób:Teraz możesz utworzyć oznaczoną skrytkę:
a
show
iapply
to znowu jak zwykle:źródło
Nie sądzę, że istnieje sposób, aby pop skasować skrytkę po nazwie.
Stworzyłem funkcję bash, która to robi.
Przykład użycia:
Mam nadzieję, że to pomoże!
źródło
Dla wszystkiego oprócz tworzenia skrytki zaproponowałbym inne rozwiązanie, wprowadzając fzf jako zależność. Polecam poświęcić 5 minut i zaznajomić się z tym, ponieważ jest to ponadprzeciętne zwiększenie wydajności.
W każdym razie pokrewny fragment ich strony z przykładami oferuje wyszukiwanie skrytek. Bardzo łatwo jest zmienić skryptlet, aby dodać dodatkowe funkcje (takie jak ukrywanie aplikacji lub upuszczanie):
źródło