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.