Jag har alltid haft intrycket att du kan ge ett stash ett namn genom att göra git stash save stashname
, som du senare kan tillämpa genom att göra git stash apply stashname
. Men det verkar som om allt som händer i det här fallet är att stashname
kommer att användas som beskrivning av stash.
Finns det inget sätt att faktiskt namnge en stash? Om inte, vad skulle du rekommendera för att uppnå motsvarande funktionalitet? I huvudsak har jag en liten stash som jag regelbundet vill tillämpa, men jag vill inte alltid behöva jaga i git stash list
vad dess faktiska stashnummer är.
Så här gör du:
git stash save "my_stash"
Där "my_stash"
är namnet på lagret.
Några fler användbara saker att känna till: Alla förvaringsutrymmen lagras i en stapel. Typ:
git stash list
Detta kommer att lista alla dina förvaringsutrymmen.
För att tillämpa ett förvaringsutrymme och ta bort det från förvaringsstapeln, skriv:
git stash pop stash@{n}
Om du vill tillämpa ett förråd och behålla det i förrådsstapeln skriver du:
git stash apply stash@{n}
Där n
är indexet för den gömda ändringen.
Du kan omvandla ett förråd till en gren om du tycker att det är tillräckligt viktigt:
git stash branch <branchname> [<stash>]
från man-sidan:
Detta skapar och kontrollerar en ny gren som heter <branchname>
med utgångspunkt från den commit där <stash>
ursprungligen skapades, tillämpar de ändringar som registrerats i <stash>
till det nya arbetsträdet och indexet, och släpper sedan <stash>
om detta slutförs framgångsrikt. Om ingen <stash>
anges, tillämpas den senaste.
Detta är användbart om den gren som du körde git stash save
på har ändrats tillräckligt mycket för att git stash apply misslyckas på grund av konflikter. Eftersom stash appliceras ovanpå den commit som var HEAD när git stash kördes, återställs det ursprungliga stashade tillståndet utan konflikter.
Du kan senare återbasera den nya grenen till någon annan plats som är en ättling till den plats där du befann dig när du stashade.
Förvaringsutrymmen är inte avsedda att vara permanenta saker som du vill ha. Det är förmodligen bättre att använda taggar på commits. Konstruera det du vill gömma. Gör en commit av den. Skapa en tagg för den commit. Rulla sedan tillbaka din gren till HEAD^
. När du nu vill återanvända denna stash kan du använda git cherry-pick -n tagname
(-n
är --no-commit
).