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.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow