Svenska ▾ Topics ▾ Latest version ▾ git-stash last updated in 2.52.0

NAMN

git-stash - Göm undan ändringar i en lortig arbetskatalog

SYNOPSIS

git stash list [<logg-flaggor>]
git stash show [-u | --include-untracked | --only-untracked] [<diff-flaggor>] [<gömma>]
git stash drop [-q | --quiet] [<gömma>]
git stash pop [--index] [-q | --quiet] [<gömma>]
git stash apply [--index] [-q | --quiet] [<gömma>]
git stash branch <branchname> [<gömma>]
git stash [push [-p | --patch] [-S | --staged] [-k | --[no-]keep-index] [-q | --quiet]
	     [-u | --include-untracked] [-a | --all] [(-m | --message) <meddelande>]
	     [--pathspec-from-file=<fil> [--pathspec-file-nul]]
	     [--] [<sökvägsmönster>…​]]
git stash save [-p | --patch] [-S | --staged] [-k | --[no-]keep-index] [-q | --quiet]
           [-u | --include-untracked] [-a | --all] [<meddelande>]
git stash clear
git stash create [<meddelande>]
git stash store [(-m | --message) <meddelande>] [-q | --quiet] <incheckning>
git stash export (--print | --to-ref <ref>) [<gömma>…​]
git stash import <incheckning>

BESKRIVNING

Använd git stash när du vill registrera arbetskatalogens och indexets aktuella tillstånd, men vill gå tillbaka till en ren arbetskatalog. Kommandot sparar dina lokala ändringar och återställer arbetskatalogen så att den matchar HEAD-incheckningen.

De modifieringar som lagras av detta kommando kan listas med git stash list, inspekteras med git stash show och återställas (eventuellt ovanpå en annan incheckning) med git stash apply. Att anropa git stash utan några argument är likvärdigt med git stash push. En stash listas som standard som "WIP on <grennamn> …​", men du kan ge ett mer beskrivande meddelande på kommandoraden när du skapar en.

Den senaste gömman du skapade lagras i refs/stash; äldre gömmor finns i refloggen för denna referens och kan namnges med den vanliga reflogsyntaxen (t.ex. stash@{0} är den senast skapade gömman, stash@{1} är den föregående, stash@{2.hours.ago} är också möjligt). Stash kan också refereras genom att bara ange stashindexet (t.ex. heltalet <n> är ekvivalent med stash@{<n>}).

KOMMANDON

push [-p | --patch] [-S | --staged] [-k | --[no-]keep-index] [-u | --include-untracked] [ -a | --all] [-q | --quiet] [(-m|--message) <sökvägsmönster>] [--pathspec-from-file=<fil> [--pathspec-file-nul]] [--] [<sökvägsmönster>...]

Spara dina lokala ändringar till en ny gömd post och rulla tillbaka dem till HEAD (i arbetsträdet och i indexet). <meddelande>-delen är valfri och ger beskrivningen tillsammans med det lagrade tillståndet.

För att snabbt skapa en ögonblicksbild kan du utelämna "push". I det här läget är argument som inte är alternativ inte tillåtna för att förhindra att ett felstavat delkommando skapar en oönskad gömd post. De två undantagen från detta är stash -p som fungerar som alias för stash push -p och sökvägsmönster-poster, vilka är tillåtna efter ett dubbelt bindestreck -- för särskiljning.

save [-p | --patch] [-S | --staged] [-k | --[no-]keep-index] [-u | --include-untracked] [-a | --all] [-q | --quiet] [<meddelande>]

Det här alternativet är föråldrat till förmån för git stash push. Det skiljer sig från "stash push" genom att det inte kan ta sökvägsmönster. I stället sammanfogas alla argument som inte är alternativ för att bilda gömma-meddelandet.

list [<logg-flaggor>]

Lista de gömda poster du för närvarande har. Varje gömd post listas med sitt namn (t.ex. stash@{0} är den senaste posten, stash@{1} är den föregående, etc.), namnet på den gren som var aktuell när posten gjordes och en kort beskrivning av den incheckning som posten baserades på.

stash@{0}: WIP on submit: 6ebd0e2... Uppdatera git-stash-dokumentationen
stash@{1}: On master: 9cc0589... Lägg till git-stash

Kommandot tar alternativ som är tillämpliga på kommandot git log för att kontrollera vad som visas och hur. Se git-log[1].

show [-u | --include-untracked | --only-untracked] [<diff-flaggor>] [<gömma>]

Visa ändringarna som registrerats i den gömda posten som en skillnad mellan det undangömda innehållet och incheckningen från den tidpunkt då den gömda posten först skapades. Som standard visar kommandot diffstat, men det accepterar alla format som är kända för git diff (t.ex. git stash show -p stash@{1} för att visa den näst senaste posten i patch-format). Om inget <diff-alternativ> anges kommer standardbeteendet att ges av konfigurationsvariablerna stash.showStat och stash.showPatch. Du kan också använda stash.showIncludeUntracked för att ange om --include-untracked är aktiverat som standard.

pop [--index] [-q | --quiet] [<gömma>]

Ta bort ett enskilt tillstånd från gömman och tillämpa det ovanpå det aktuella tillståndet i arbetsträdet, d.v.s. utför den omvända operationen till git stash push. Arbetskatalogen måste matcha indexet.

Att tillämpa tillståndet kan misslyckas vid konflikter; i det här fallet tas det inte bort från gömma-listan. Du måste lösa konflikterna manuellt och anropa git stash drop manuellt efteråt.

apply [--index] [-q | --quiet] [<gömma>]

Som pop, men ta inte bort tillståndet från gömma-listan. Till skillnad från pop kan <stash> vara vilken incheckning som helst som ser ut som en incheckning skapad av stash push eller stash create.

branch <grennamn> [<gömma>]

Skapar och checkar ut en ny gren med namnet <grennamn> med början från den incheckning där <gömman> ursprungligen skapades, tillämpar ändringarna som registrerats i <gömman> på det nya arbetsträdet och indexet. Om det lyckas, och <gömman> är en referens av formen stash@{<revision>}, tas <gömman> bort.

Det är användbart om grenen där du kör git stash push har ändrats tillräckligt för att git stash apply misslyckas på grund av konflikter. Eftersom den gömda posten tillämpas ovanpå incheckningen som var HEAD när git stash kördes, återställer den det ursprungligen gömda tillståndet utan konflikter.

clear

Ta bort alla poster i gömman. Observera att dessa poster sedan kommer att bli föremål för rensning och kan vara omöjliga att återställa (se EXEMPEL nedan för en möjlig strategi).

drop [-q | --quiet] [<gömma>]

Ta bort en enskild post från listan över gömda poster.

create

Skapa en gömd post (som är ett vanligt incheckningsobjekt) och returnera dess objektnamn, utan att lagra den någonstans i ref-namnrymden. Detta är tänkt att vara användbart för skript. Det är förmodligen inte det kommando du vill använda; se "push" ovan.

store

Lagra en given gömma som skapats via git stash create (vilket är en dinglande sammanslagningsincheckning) i gömmereferensen och uppdatera gömmerefloggen. Detta är tänkt att vara användbart för skript. Det är förmodligen inte det kommando du vill använda; se "push" ovan.

export ( --print | --to-ref <ref> ) [<gömma>...]

Exportera de angivna gömmorna, eller alla om inga anges, till en kedja av incheckningar som kan överföras med de vanliga hämtnings- och push-mekanismerna, och sedan importeras med underkommandot import.

import <incheckning>

Importera de angivna gömmorna från den angivna incheckningen, som måste ha skapats av export, och lägg till dem i listan över gömmor. För att ersätta de befintliga gömmorna, använd clear först.

ALTERNATIV

-a
--all

Det här alternativet är endast giltigt för kommandona push och save.

Alla ignorerade och ospårade filer lagras också och rensas sedan upp med git clean.

-u
--include-untracked
--no-include-untracked

När de används med kommandona push och save, lagras även alla ospårade filer och rensas sedan upp med git clean.

När det används med kommandot show visas de ospårade filerna i den gömda posten som en del av diffen.

--only-untracked

Det här alternativet är endast giltigt för kommandot show.

Visa endast de ospårade filerna i den gömda posten som en del av diffen.

--index

Det här alternativet är endast giltigt för kommandona pop och apply.

Försöker återställa inte bara arbetsträdets-ändringar, utan även indexets. Detta kan dock misslyckas när det finns konflikter (som lagras i indexet, där du därför inte längre kan tillämpa ändringarna som de ursprungligen var).

-k
--keep-index
--no-keep-index

Det här alternativet är endast giltigt för kommandona push och save.

Alla ändringar som redan har lagts till i indexet lämnas intakta.

-p
--patch

Det här alternativet är endast giltigt för kommandona push och save.

Välj interaktivt stycken från diffen mellan HEAD och arbetsträdet som ska gömmas. Den gömda posten byggs så att dess indextillstånd är samma som indexets tillstånd i ditt kodförråd, och dess arbetsträd innehåller bara de ändringar du valde interaktivt. De valda ändringarna rullas sedan tillbaka från arbetsträdet. Se avsnittet “Interactive Mode” i git-add[1] för hur läget --patch används.

Alternativet --patch innebär --keep-index. Du kan använda --no-keep-index för att åsidosätta detta.

-U<n>
--unified=<n>

Generate diffs with <n> lines of context. Defaults to diff.context or 3 if the config option is unset.

--inter-hunk-context=<n>

Visar sammanhanget mellan olika stycken, upp till det angivna <antal> rader, och sammanfogar därmed stycken som ligger nära varandra. Standardvärdet är diff.interHunkContext eller 0 om konfigurationsalternativet inte är inställt.

-S
--staged

Det här alternativet är endast giltigt för kommandona push och save.

Lagra endast de ändringar som för närvarande är pågående. Detta liknar grundläggande git commit förutom att tillståndet är incheckat till gömman i stället för den aktuella grenen.

Alternativet --patch har prioritet framför detta.

--pathspec-from-file=<fil>

Det här alternativet är endast giltigt för kommandot push.

Sökvägsmönster skickas i <fil> i stället för kommandoradsargument. Om <fil> är exakt - används standardindata. Sökvägsmönster-poster separeras med LF eller CR/LF. Sökvägsmönster-poster kan citeras enligt beskrivningen för konfigurationsvariabeln core.quotePath (se git-config[1]). Se även --pathspec-file-nul och global --literal-pathspecs.

--pathspec-file-nul

Det här alternativet är endast giltigt för kommandot push.

Endast meningsfullt med --pathspec-from-file. Sökvägsmönster-poster separeras med NUL-tecken och alla andra tecken tolkas bokstavligt (inklusive radbrytningar och citattecken).

-q
--quiet

Det här alternativet är endast giltigt för kommandona apply, drop, pop, push, save och store.

Tyst, undertryck feedbackmeddelanden.

--print

Det här alternativet är endast giltigt för kommandot export.

Skapa kedjan av incheckningar som representerar de exporterade gömma-filerna utan att lagra den någonstans i referensnamnrymden och skriv ut objekt-ID:t till standardutdata. Detta är utformat för skript.

--to-ref

Det här alternativet är endast giltigt för kommandot export.

Skapa kedjan av incheckningar som representerar de exporterade gömma-filerna och lagra den till den angivna referensen.

--

Det här alternativet är endast giltigt för kommandot push.

Separerar sökvägsmönster från alternativ för särskiljnings-ändamål.

<sökvägsmönster>...

Det här alternativet är endast giltigt för kommandot push.

Den nya gömda posten registrerar de modifierade tillstånden endast för de filer som matchar sökvägsmönstret. Indexposterna och arbetsträdsfilerna rullas sedan tillbaka till tillståndet i HEAD endast för dessa filer också, vilket lämnar filer som inte matchar sökvägsmönstret intakta.

För mer information, se posten sökvägsmönster i gitglossary[7].

<gömma>

Det här alternativet är endast giltigt för kommandona apply, branch, drop, pop, show och export.

En referens av formen stash@{<revision>}. När ingen <gömma> anges antas den senaste gömma (det vill säga stash@{0}).

DISKUSSION

En gömd post representeras som en incheckning vars träd registrerar arbetskatalogens tillstånd, och dess första förälder är incheckning vid HEAD när posten skapades. Trädet för den andra föräldern registrerar indexets tillstånd när posten görs, och den görs till ett barn till HEAD-incheckning. Härkomstgrafer ser ut så här:

       .----W
      /    /
-----H----I

där H är HEAD-incheckningen, I är en incheckning som registrerar indexets tillstånd och W är en incheckning som registrerar arbetsträdets tillstånd.

EXEMPEL

Drar in ("hämta") i ett smutsigt träd

När du är mitt uppe i något lär du dig att det finns förändringar uppströms som eventuellt är relevanta för det du gör. När dina lokala ändringar inte står i konflikt med ändringarna uppströms, kommer en enkel "git pull" att låta dig gå vidare.

Det finns dock fall där dina lokala ändringar står i konflikt med ändringarna uppströms, och git pull vägrar att skriva över dina ändringar. I sådana fall kan du lagra dina ändringar, utföra en pull och sedan plocka ur gömman, så här:

$ git pull
 ...
fil-foobarn är inte uppdaterad, kan inte slås samman.
$ git stash
$ git pull
$ git stash pop
Avbrutet arbetsflöde

När du är mitt uppe i något kommer din chef in och kräver att du åtgärdar något omedelbart. Traditionellt sett skulle du göra en incheckning till en tillfällig gren för att lagra dina ändringar och återgå till din ursprungliga gren för att göra den akuta åtgärden, så här:

# ... hack hack hack ...
$ git switch -c my_wip
$ git commit -a -m "WIP"
$ git switch master
$ edit emergency fix
$ git commit -a -m "Fixa snabbt"
$ git switch my_wip
$ git reset --soft HEAD^
# ... fortsätta hacka ...

Du kan använda git stash för att förenkla ovanstående, så här:

# ... hack hack hack ...
$ git stash
$ edit emergency fix
$ git commit -a -m "Fixa snabbt"
$ git stash pop
# ... fortsätta hacka ...
Testa partiella incheckningar

Du kan använda git stash push --keep-index när du vill göra två eller fler incheckningar från ändringarna i arbetsträdet, och du vill testa varje ändring innan du checkar-in:

#... hack hack hack...
$ git add --patch foo # lägg bara till den första delen i indexet
$ git stash push --keep-index # spara alla andra ändringar i gömman
$edit/build/test första delen
$ git commit -m 'Första delen' # incheckning fullständigt testad ändring
$ git stash pop # förbered dig för att arbeta med alla andra ändringar
# ... upprepa ovanstående fem steg tills en incheckning återstår ...
$edit/build/test återstående delar
$ git commit foo -m 'Återstående delar'
Spara orelaterade ändringar för framtida bruk

När du är mitt uppe i stora förändringar och hittar något orelaterat problem som du inte vill glömma att åtgärda, kan du göra ändringen/ändringarna, köa dem och använda git stash push --staged för att lagra dem för framtida bruk. Detta liknar att checka in de köade ändringarna, bara det att incheckningen hamnar i gömman och inte på den aktuella grenen.

#... hack hack hack...
$ git add --patch foo # lägg till orelaterade ändringar i indexet
$ git stash push --staged # spara dessa ändringar i gömman
# ... hack hack hack, avsluta aktuella ändringar ...
$ git commit -m 'Massive' # incheckning fullt testade ändringar
$ git switch fixup-branch # växla till en annan gren
$ git stash pop # för att avsluta arbetet med de sparade ändringarna
Återställning av gömda poster som felaktigt rensats eller tappats

Om du av misstag tappar eller rensar gömda poster kan de inte återställas via de vanliga säkerhetsmekanismerna. Du kan dock prova följande besvärjelse för att få en lista över gömda poster som fortfarande finns i ditt kodförråd, men som inte längre är nåbara:

git fsck --unreachable |
grep commit | cut -d\  -f3 |
xargs git log --merges --no-walk --grep=WIP

KONFIGURATION

Allt under den här raden i det här avsnittet är selektivt inkluderat från dokumentationen git-config[1]. Innehållet är detsamma som det som finns där:

stash.index

Om detta är satt till sant, kommer git stash apply och git stash pop att bete sig som om --index angavs. Standardvärdet är falskt.

stash.showIncludeUntracked

Om detta är satt till sant, kommer kommandot git stash show att visa de ospårade filerna från en gömma-post. Standardvärdet är falskt.

stash.showPatch

Om detta är satt till sant, kommer kommandot git stash show utan ett alternativ att visa gömma-posten i patch-format. Standardvärdet är falskt.

stash.showStat

Om detta är satt till sant, kommer kommandot git stash show utan ett alternativ att visa en diffstat för gömma-posten. Standardinställningen är sant.

GIT

En del av git[1]-sviten