Hoe u uw wijzigingen met de bijbehorende naam kunt opslaan en deze daarna kunt vinden
Ontwikkelaars moeten vaak multitasken. Mogelijk werkt u aan een nieuwe functie en is er mogelijk een verzoek om een bug op te lossen. Of misschien ben je de hoofdontwikkelaar van meerdere projecten.
Als je tussen taken wisselt, wil je soms geen onvoltooid werk doen. In deze gevallen kan het git stash-commando een grote hulp zijn. Hiermee kun je je wijzigingen stapelen en later terugkeren naar het onvoltooide werk zonder onnodige commits aan je git-repositories toe te voegen.
Een workflow voor Git Stash
Laten we een git master branch initialiseren en een bestand ReadMe vastleggen.tekst.
$ mkdir mijn_project$ cd mijn_project/
$ git init
$ raak LeesMij aan.tekst
$ git add -A
$ git commit -m "Initialiseren"
Laten we nu nog een bestand toevoegen met de naam a.txt naar de master branch.
$ raak een . aan.tekst$ git add -A
$ git commit -m "A toegevoegd.tekst"
Als u de geschiedenis controleert, ziet u:
$ git log --onelined79f7aa Toegevoegd a.tekst
9434d7e Initialiseren
Laten we nu een feature1 branch maken en een b . toevoegen.txt-bestand:
$ git branch-functie1$ git afrekenfunctie1
$ raak b . aan.tekst
$ git add -A
$ git commit -m "Toegevoegd b.tekst"
Open je b.txt-bestand in een editor en zet in de regel:
Ik sta op het punt dit te veranderen in..En sla het bestand op. Als je je git-status controleert, zie je het volgende:
$ git-statusOp vertakkingsfunctie1
Wijzigingen niet gestaged voor commit:
(gebruik "git add ."
(gebruik "git checkout" --
gewijzigd: b.tekst
geen wijzigingen toegevoegd aan commit (gebruik "git add" en/of "git commit -a")
Stel dat u in dit stadium een verzoek krijgt om de a.txt-bestand op de master-branch. Maar je bent nog niet klaar met de b.txt-bestand. Als je de master branch probeert uit te checken, krijg je de volgende foutmelding:
$ git checkout masterfout: uw lokale wijzigingen in de volgende bestanden worden overschreven bij het afrekenen:
b.tekst
Alsjeblieft, leg je wijzigingen vast of bewaar ze voordat je van branch kunt wisselen.
Afbreken
Maar je wilt het onvoltooide werk niet vastleggen in b.tekst. Je kunt de git stash in deze situatie gebruiken:
$ git stashOpgeslagen werkmap en indexstatus WIP op feature1: 2cfe39b Toegevoegd b.tekst
HEAD staat nu op 2cfe39b Toegevoegd b.tekst
Als je b . aanvinkt.txt, het moet leeg zijn:
$ kat b.tekst$
Als je de voorraad controleert, zie je:
$ git stash-lijststash@0: WIP op feature1: 2cfe39b Toegevoegd door.tekst
Als je de master branch probeert uit te checken, zou je dat nu moeten kunnen:
$ git checkout masterOvergeschakeld naar tak 'master'
Veronderstel dat je de nodige wijzigingen aanbrengt op de master en dan teruggaat naar feature1 branch:
$ git afrekenfunctie1Jouw B.txt is nog leeg:
$ kat b.tekst$
Maar als u de wijzigingen uit de stash haalt met behulp van de volgende opdracht:
$ git stash van toepassingOp vertakkingsfunctie1
Wijzigingen niet gestaged voor commit:
(gebruik "git add ."
(gebruik "git checkout" --
gewijzigd: b.tekst
geen wijzigingen toegevoegd aan commit (gebruik "git add" en/of "git commit -a")
De opdracht stash apply nam de opgeslagen wijzigingen en paste deze toe op b.txt-bestand
Je kunt je werk afmaken in b.txt mijn wijziging van de regel
Naar
Ga nu door en leg uw wijzigingen vast:
$ git add -A$ git commit -m "Gewijzigd door.tekst"
Als je een stash toepast, wordt deze niet automatisch uit de stash verwijderd. Je moet het handmatig opruimen:
$ git stash dropGedropt refs/stash@0 (0a66a16b32633e8d564d08e38254c491c1b1d3be)
Waarom Git Stash met naam?
De git-stash is een stapel. Zodat u uw wijzigingen kunt blijven stapelen.
Stel dat u “X” toevoegt aan b.txt, bewaar het, voeg een "Y" toe aan b.txt, berg het op en voeg een "Z" toe aan b.txt en bewaar het. Als je de stashgeschiedenis bekijkt, zie je zoiets als dit:
$ git stash-lijst[e-mail beveiligd]0: WIP op functie1: 2d6f515 Gewijzigd door.tekst
[e-mail beveiligd]1: WIP op functie1: 2d6f515 Gewijzigd door.tekst
[email protected]2: WIP op functie1: 2d6f515 Gewijzigd door.tekst
Je hebt geen manier om te weten welke stash welke verandering heeft. Als je aan het stashen bent, kun je de optie Opslaan gebruiken om opmerkingen te plaatsen. Je kunt de opmerkingen gebruiken om een naam aan je stash te koppelen en ze herkenbaar te maken:
$ git stash save "X"Opgeslagen werkmap en indexstatus Op feature1: X
HEAD staat nu op 2d6f515 Gewijzigd b.tekst
Voor het toevoegen van "X", "Y" en "Z" modificaties, kun je het volgende in je stash krijgen met behulp van de opslagoptie voor elke stash:
$ git stash-lijststash@0: Aan functie1: Z
stash@1: Op functie1: Ja
stash@2: Op functie1: X
Nu heb je een naam voor elke wijziging die je hebt opgeslagen. Helaas kun je de naam niet gebruiken om de voorraad op te halen. Je moet het stashnummer gebruiken. Stel dat u uw "Y" -wijziging wilt krijgen. U ziet dat [e-mail beveiligd]1 Y . is. U kunt die wijziging dus toepassen op uw huidige filiaal:
$ git stash stash toepassen@1en je vriend.txt moet de wijzigingen bevatten van [email protected]1.
Je kunt dezelfde methode gebruiken om een stash te droppen. Stel dat je je realiseert dat je de X-voorraad niet langer nodig hebt. Je kunt gewoon de volgende opdracht gebruiken om die stash te verwijderen:
$ git stash drop stash@2En de voorraad zou weg moeten zijn:
$ git stash-lijststash@0: Aan functie1: Z
stash@1: op functie1: Y
Houd er rekening mee dat als u de opties voor toepassen en neerzetten zonder parameters gebruikt, deze de bovenkant van de stapel gebruikt ([email protected]0).
Conclusie
Het git stash commando is een krachtige manier om je werkruimte te beheren. Als u deze opdracht onder de knie hebt, kunt u efficiënter werken.
Verdere studie:
- https://git-scm.com/book/nl/v1/Git-Tools-Stashing
Referenties:
Stack Overflow: hoe-naam-en-ophalen-een-stash-op-naam-in-git