Zoeken…


Syntaxis

  • 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>

parameters

Parameter Details
tonen Toon de wijzigingen die zijn vastgelegd in de opslag als een verschil tussen de opslagstatus en de oorspronkelijke bovenliggende. Als er geen <stash> is opgegeven, wordt de nieuwste weergegeven.
lijst Maak een lijst van de voorraad die je momenteel hebt. Elke stash wordt vermeld met zijn naam (bijv. Stash @ {0} is de laatste stash, stash @ {1} is de vorige, enz.), De naam van de tak die actueel was toen de stash werd gemaakt, en een korte beschrijving van de commit waarop de voorraad was gebaseerd.
knal Verwijder een enkele opgeslagen status uit de voorraadlijst en pas deze toe boven de huidige werkende boomstatus.
van toepassing zijn Zoals pop , maar verwijder de status niet uit de stashlijst.
Doorzichtig Verwijder alle opgeslagen staten. Houd er rekening mee dat die staten dan worden gesnoeid en mogelijk niet kunnen worden hersteld.
laten vallen Verwijder een enkele opgeslagen status uit de voorraadlijst. Als er geen <stash> wordt gegeven, wordt de laatste verwijderd. dat wil zeggen stash @ {0}, anders moet <stash> een geldige stash-logreferentie zijn van het formulier stash @ {<revision>}.
creëren Maak een stash (wat een gewoon commit-object is) en retourneer de objectnaam, zonder het ergens in de ref-naamruimte op te slaan. Dit is bedoeld als handig voor scripts. Het is waarschijnlijk niet de opdracht die u wilt gebruiken; zie "opslaan" hierboven.
op te slaan Bewaar een gegeven stash gemaakt via git stash create (wat een bengelende merge commit is) in de stash ref, en update de stash reflog. Dit is bedoeld als handig voor scripts. Het is waarschijnlijk niet de opdracht die u wilt gebruiken; zie "opslaan" hierboven.

Opmerkingen

Stashing stelt ons in staat om een schone werkmap te hebben zonder informatie te verliezen. Dan is het mogelijk om aan iets anders te gaan werken en / of van tak te wisselen.

Wat is Stashing?

Wanneer u aan een project werkt, bent u mogelijk halverwege een wijziging van een functietak wanneer een bug wordt opgeworpen tegen master. U bent niet klaar om uw code te plegen, maar u wilt ook uw wijzigingen niet verliezen. Dit is waar git stash handig is.

Voer git status op een branch om je niet-vastgelegde wijzigingen te tonen:

(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")

Voer vervolgens git stash uit om deze wijzigingen in een stapel op te slaan:

(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

Als u bestanden aan uw werkmap hebt toegevoegd, kunnen deze ook worden opgeslagen. Je moet ze alleen eerst opvoeren.

(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) $

Uw werkmap is nu vrij van wijzigingen die u heeft aangebracht. Je kunt dit zien door git status opnieuw uit te voeren:

(master) $ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean

Om de allerlaatste voorraad toe te passen, voer je git stash apply (bovendien kun je de laatst opgeslagen git stash pop toepassen en verwijderen met 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")

Merk echter op dat stashing niet herinnert aan de tak waaraan u werkte. In de bovenstaande voorbeelden was de gebruiker bezig met master . Als ze overschakelen naar de dev branch, dev , en git stash apply de laatste stash toe op de dev branch.

(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")

Maak een voorraad

Bewaar de huidige status van de werkmap en de index (ook bekend als het staging-gebied) in een stapel stashes.

git stash

Gebruik de --include-untracked of -u om alle niet-bijgehouden bestanden in de opslag op te nemen.

git stash --include-untracked

Om een bericht bij uw voorraad te voegen om het later gemakkelijker te kunnen identificeren

git stash save "<whatever message>"

Gebruik de --keep-index of -k om het --keep-index na de opslag in de huidige staat te laten.

git stash --keep-index

Lijst opgeslagen stashes

git stash list

Hiermee worden alle stashes in de stapel in omgekeerde chronologische volgorde weergegeven.
U krijgt een lijst die er ongeveer zo uitziet:

stash@{0}: WIP on master: 67a4e01 Merge tests into develop
stash@{1}: WIP on master: 70f0d95 Add user role to localStorage on user login

U kunt naar de specifieke voorraad verwijzen met de naam, bijvoorbeeld de stash@{1} .

Toon voorraad

Toont de wijzigingen die zijn opgeslagen in de laatste voorraad

git stash show

Of een specifieke voorraad

git stash show stash@{n}

Inhoud van de opgeslagen wijzigingen voor de specifieke voorraad weergeven

git stash show -p stash@{n}

Verwijder de voorraad

Verwijder alle voorraad

git stash clear

Verwijdert de laatste voorraad

git stash drop

Of een specifieke voorraad

git stash drop stash@{n}

Pas toe en verwijder de voorraad

Typ het volgende om de laatste voorraad aan te brengen en van de stapel te verwijderen:

git stash pop

Typ het volgende om een specifieke voorraad toe te passen en van de stapel te verwijderen:

git stash pop stash@{n}

Pas voorraad toe zonder het te verwijderen

Past de laatste voorraad toe zonder deze uit de stapel te verwijderen

git stash apply

Of een specifieke voorraad

git stash apply stash@{n}

Herstellen van eerdere wijzigingen uit voorraad

Gebruik om je meest recente voorraad te krijgen na het uitvoeren van git-voorraad

 git stash apply

Gebruik om een lijst met je stashes te bekijken

 git stash list

U krijgt een lijst die er ongeveer zo uitziet

stash@{0}: WIP on master: 67a4e01 Merge tests into develop
stash@{1}: WIP on master: 70f0d95 Add user role to localStorage on user login

Kies een andere git-voorraad om te herstellen met het nummer dat verschijnt voor de gewenste voorraad

git stash apply stash@{2}

Gedeeltelijke voorraad

Als u slechts enkele verschillen in uw werkset wilt opslaan, kunt u een gedeeltelijke voorraad gebruiken.

git stash -p

En selecteer vervolgens interactief welke delen u wilt opbergen.

Vanaf versie 2.13.0 kunt u ook de interactieve modus vermijden en een gedeeltelijke voorraad maken met een padspec met behulp van het nieuwe push- trefwoord.

git stash push -m "My partial stash" -- app.config

Pas een deel van een voorraad toe met afrekenen

Je hebt een stash gemaakt en wilt slechts enkele van de bestanden in die stash uitchecken.

git checkout stash@{0} -- myfile.txt

Interactief stashen

Stashing neemt de vuile status van uw werkmap - dat wil zeggen, uw aangepaste bijgehouden bestanden en geënsceneerde wijzigingen - en slaat het op in een stapel onvoltooide wijzigingen die u op elk gewenst moment opnieuw kunt toepassen.

Alleen gewijzigde bestanden opslaan:

Stel dat u de geënsceneerde bestanden niet wilt opslaan en alleen de gewijzigde bestanden wilt opslaan, zodat u het volgende kunt gebruiken:

git stash --keep-index

Die slaat alleen de gewijzigde bestanden op.

Niet-bijgehouden bestanden opslaan:

Stash slaat nooit de niet-bijgehouden bestanden op, maar slaat alleen de gewijzigde en geënsceneerde bestanden op. Dus stel dat u de niet-bijgehouden bestanden ook moet opslaan, dan kunt u dit gebruiken:

git stash -u

hiermee worden de niet-bijgehouden, geënsceneerde en gewijzigde bestanden bijgehouden.

Berg alleen enkele specifieke wijzigingen op:

Stel dat u slechts een deel van de code uit het bestand of slechts enkele bestanden van alle gewijzigde en gestapelde bestanden moet opslaan, dan kunt u dit als volgt doen:

git stash --patch

Git verzamelt niet alles wat is gewijzigd, maar zal je in plaats daarvan interactief vragen welke van de wijzigingen je wilt opslaan en die je in je werkmap wilt houden.

Verplaats uw lopende werk naar een andere vestiging

Als je je tijdens het werk realiseert dat je op de verkeerde branch zit en je hebt nog geen commits gemaakt, kun je je werk eenvoudig verplaatsen naar de juiste branch met behulp van stashing:

git stash
git checkout correct-branch
git stash pop

Vergeet niet dat git stash pop de laatste stash toepast en deze uit de stashlijst verwijdert. Om de voorraad in de lijst te houden en alleen op een tak toe te passen, kun je gebruiken:

git stash apply

Krijg een gevallen voorraad terug

Als je het net hebt laten verschijnen en de terminal is nog steeds open, dan zal de hash-waarde nog steeds worden afgedrukt door git stash pop op het scherm:

$ git stash pop
[...]
Dropped refs/stash@{0} (2ca03e22256be97f9e40f08e6d6773c7d41dbfd1)

(Merk op dat gitstash drop ook dezelfde lijn produceert.)

Anders kunt u het hier vinden:

git fsck --no-reflog | awk '/dangling commit/ {print $3}'

Dit laat je alle commits zien aan de uiteinden van je commit grafiek waarnaar niet langer wordt verwezen vanuit een branch of tag - elke verloren commit, inclusief elke stash commit die je ooit hebt gemaakt, zal ergens in die grafiek zijn.

De eenvoudigste manier om de gewenste Stash-commit te vinden, is waarschijnlijk die lijst door te geven aan gitk :

gitk --all $( git fsck --no-reflog | awk '/dangling commit/ {print $3}' )

Dit zal een repository-browser starten die je elke vastlegging in de repository ooit laat zien , ongeacht of deze bereikbaar is of niet.

Je kunt gitk daar vervangen door zoiets als git log --graph --oneline --decorate als je een mooie grafiek op de console verkiest boven een aparte GUI-app.

Zoek naar commits van dit formulier om stash-commits te herkennen:

WIP op somebranch : commithash Een oud commit bericht

Zodra je de hash kent van de gewenste commit, kun je deze toepassen als een stash:

git stash apply $stash_hash

Of je kunt het contextmenu in gitk gebruiken om branches te maken voor onbereikbare commits waarin je geïnteresseerd bent. Daarna kun je met alles doen wat je wilt met alle normale tools. Als je klaar bent, blaas je die takken gewoon weer weg.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow