Sök…
Syntax
-
git stash list [<options>]
-
git stash show [<stash>]
-
git stash drop [-q|--quiet] [<stash>]
-
git stash ( pop | apply ) [--index] [-q|--quiet] [<stash>]
-
git stash branch <branchname> [<stash>]
-
git stash [save [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet] [-u|--include-untracked] [-a|--all] [<message>]]
-
git stash clear
-
git stash create [<message>]
-
git stash store [-m|--message <message>] [-q|--quiet] <commit>
parametrar
Parameter | detaljer |
---|---|
visa | Visa ändringarna som registrerats i stashen som en skillnad mellan det inställda tillståndet och dess ursprungliga överordnade. När ingen <stash> ges, visar den senaste. |
lista | Lista de stashar som du för närvarande har. Varje stash listas med sitt namn (t.ex. stash @ {0} är den senaste stashen, stash @ {1} är den förut osv.), Namnet på den gren som var aktuell när stashen gjordes och en kort beskrivning av begåendet som stash baserades på. |
pop- | Ta bort ett enda statiskt tillstånd från stash-listan och applicera det ovanpå det aktuella arbetsträdstillståndet. |
tillämpa | Gillar pop , men ta inte bort staten från stash-listan. |
klar | Ta bort alla inställda tillstånd. Observera att dessa tillstånd kommer att bli föremål för beskärning och kan vara omöjliga att återhämta sig. |
släppa | Ta bort ett enda stash-läge från stash-listan. När ingen <stash> ges, tar den bort den senaste. dvs. stash @ {0}, annars måste <stash> vara en giltig stash-logreferens för formen stash @ {<revision>}. |
skapa | Skapa en stash (som är ett vanligt engagemang) och returnera dess objektnamn utan att lagra det någonstans i referensområdet. Detta är avsett att vara användbart för skript. Det är förmodligen inte det kommando du vill använda; se "spara" ovan. |
Lagra | Lagra en given stash skapad via git stash create (som är en dinglande sammanslagningskombination) i stash-ref, uppdatera stash-refloggen. Detta är avsett att vara användbart för skript. Det är förmodligen inte det kommando du vill använda; se "spara" ovan. |
Anmärkningar
Stashing tillåter oss att ha en ren fungerande katalog utan att förlora information. Då är det möjligt att börja arbeta med något annat och / eller byta grenar.
Vad är Stashing?
När du arbetar på ett projekt, kan du vara halvvägs genom en funktionsgrenbyte när ett fel tas upp mot master. Du är inte redo att begå din kod, men du vill inte heller tappa dina ändringar. Det är här git stash
är praktiskt.
Kör git status
på en gren för att visa dina otillåtna ändringar:
(master) $ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: business/com/test/core/actions/Photo.c
no changes added to commit (use "git add" and/or "git commit -a")
Kör sedan git stash
att spara dessa ändringar i en bunt:
(master) $ git stash
Saved working directory and index state WIP on master:
2f2a6e1 Merge pull request #1 from test/test-branch
HEAD is now at 2f2a6e1 Merge pull request #1 from test/test-branch
Om du har lagt till filer i din arbetskatalog kan dessa också stas in. Du behöver bara arrangera dem först.
(master) $ git stash
Saved working directory and index state WIP on master:
(master) $ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
NewPhoto.c
nothing added to commit but untracked files present (use "git add" to track)
(master) $ git stage NewPhoto.c
(master) $ git stash
Saved working directory and index state WIP on master:
(master) $ git status
On branch master
nothing to commit, working tree clean
(master) $
Din arbetskatalog är nu ren för alla ändringar du gjort. Du kan se detta genom att köra git status
:
(master) $ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean
För att tillämpa den sista stashen, kör git stash apply
(dessutom kan du applicera och ta bort den sista stashen som har ändrats med git stash pop
):
(master) $ git stash apply
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: business/com/test/core/actions/Photo.c
no changes added to commit (use "git add" and/or "git commit -a")
Observera dock att stashing inte kommer ihåg den gren du arbetade på. I exemplen ovan stängde användaren på master . Om de byter till dev gren, dev och kör git stash apply
den sista stashen på dev grenen.
(master) $ git checkout -b dev
Switched to a new branch 'dev'
(dev) $ git stash apply
On branch dev
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: business/com/test/core/actions/Photo.c
no changes added to commit (use "git add" and/or "git commit -a")
Skapa stash
Spara det aktuella tillståndet för arbetskatalogen och indexet (även känt som iscensättningsområdet) i en stapel staplar.
git stash
För att inkludera alla ospårade filer i stashen använder du - --include-untracked
eller -u
flaggorna.
git stash --include-untracked
Att inkludera ett meddelande i din stash för att göra det lättare att identifiera senare
git stash save "<whatever message>"
För att lämna iscenesättningsområdet i aktuellt --keep-index
efter stash använder du --keep-index
eller -k
.
git stash --keep-index
Lista sparade stashar
git stash list
Detta listar alla staplar i stacken i omvänd kronologisk ordning.
Du får en lista som ser ut så här:
stash@{0}: WIP on master: 67a4e01 Merge tests into develop
stash@{1}: WIP on master: 70f0d95 Add user role to localStorage on user login
Du kan hänvisa till specifika stash med dess namn, till exempel stash@{1}
.
Visa stash
Visar de ändringar som sparats i den senaste stashen
git stash show
Eller en specifik stash
git stash show stash@{n}
Visa innehållet i de ändringar som har sparats för den specifika stashen
git stash show -p stash@{n}
Ta bort stash
Ta bort allt stash
git stash clear
Tar bort den sista stashen
git stash drop
Eller en specifik stash
git stash drop stash@{n}
Applicera och ta bort stash
För att applicera den sista stashen och ta bort den från stacken - typ:
git stash pop
För att applicera specifik stash och ta bort den från stacken - typ:
git stash pop stash@{n}
Applicera stash utan att ta bort det
Tillämpar den sista stashen utan att ta bort den från bunten
git stash apply
Eller en specifik stash
git stash apply stash@{n}
Återställa tidigare förändringar från stash
För att få din senaste stash efter att ha kört git stash, använd
git stash apply
Använd för att se en lista över dina stash
git stash list
Du får en lista som ser ut så här
stash@{0}: WIP on master: 67a4e01 Merge tests into develop
stash@{1}: WIP on master: 70f0d95 Add user role to localStorage on user login
Välj en annan git stash för att återställa med det nummer som visas för det stash du vill ha
git stash apply stash@{2}
Delvis stash
Om du vill stash bara vissa skillnader i din arbetssats kan du använda en delvis stash.
git stash -p
Och välj sedan interaktivt vilka tappar du vill sticka.
Från version 2.13.0 kan du också undvika det interaktiva läget och skapa en partiell stash med en pathspec med det nya push- nyckelordet.
git stash push -m "My partial stash" -- app.config
Applicera en del av en stash med kassan
Du har gjort en stash och vill kassa bara några av filerna i den stashen.
git checkout stash@{0} -- myfile.txt
Interaktiv stashing
Stashing tar det smutsiga tillståndet i din arbetskatalog - det vill säga dina modifierade spårade filer och iscensatta ändringar - och sparar den på en bunt oavslutade ändringar som du kan använda igen när som helst.
Stashing endast modifierade filer:
Anta att du inte vill stash de iscensatta filerna och bara stash de ändrade filerna så att du kan använda:
git stash --keep-index
Vilket stash bara de ändrade filerna.
Stashing av ospårade filer:
Stash sparar aldrig de ospårade filerna, det stashar bara de ändrade och iscensatta filerna. Så antag att om du behöver stash de ospårade filerna också kan du använda detta:
git stash -u
detta spårar de ospårade, iscensatta och modifierade filerna.
Stash bara några speciella förändringar:
Anta att du bara behöver stash en del av koden från filen eller bara vissa filer bara från alla modifierade och stashade filer så kan du göra det så här:
git stash --patch
Git stash inte allt som är modifierat utan kommer istället att interaktivt fråga dig vilka av de ändringar du vill stash och vilka du vill behålla i din arbetskatalog.
Flytta ditt pågående arbete till en annan gren
Om du arbetar med att du inser att du har fel filial och inte har skapat några åtaganden ännu, kan du enkelt flytta ditt arbete till rätt gren med stashing:
git stash
git checkout correct-branch
git stash pop
Kom ihåg att git stash pop
kommer att använda den sista stashen och ta bort den från stash-listan. För att behålla stashen i listan och endast tillämpa någon gren kan du använda:
git stash apply
Återställa en tappad stash
Om du bara har poppat den och terminalen fortfarande är öppen kommer du fortfarande att ha hash-värdet tryckt av git stash pop
på skärmen:
$ git stash pop
[...]
Dropped refs/stash@{0} (2ca03e22256be97f9e40f08e6d6773c7d41dbfd1)
(Observera att git stash drop också ger samma rad.)
Annars kan du hitta det med detta:
git fsck --no-reflog | awk '/dangling commit/ {print $3}'
Detta kommer att visa dig alla åtaganden i tips på din engagemangsgraf som inte längre refereras från någon gren eller tagg - varje förlorad åtagande, inklusive varje stashåtkomst som du någonsin har skapat, kommer att finnas någonstans i den grafen.
Det enklaste sättet att hitta det stashåtagande du vill är förmodligen att skicka listan till gitk
:
gitk --all $( git fsck --no-reflog | awk '/dangling commit/ {print $3}' )
Detta kommer att lansera en databaswebbläsare som visar varje engagemang i förvaret någonsin , oavsett om det är tillgängligt eller inte.
Du kan ersätta gitk
där med något som git log --graph --oneline --decorate
om du föredrar en fin graf på konsolen framför en separat GUI-app.
För att upptäcka stash-åtaganden, leta efter engagemang i detta formulär:
WIP om somebranch : commithash Några gamla engagemang
När du har vetat vilken hash du vill använda kan du använda den som en stash:
git stash apply $stash_hash
Eller så kan du använda snabbmenyn i gitk
att skapa grenar för alla oåtkomliga åtaganden du är intresserade av. Efter det kan du göra vad du vill med dem med alla vanliga verktyg. När du är klar, bara blåsa bort de grenarna igen.