Tenk deg at du jobber med en funksjon i et Git-kontrollert programvareprosjekt. Du er rett i midten av å gjøre noen endringer når du får en forespørsel om å fikse en kritisk feil. For å begynne å løse problemet, trenger du en ny avdeling og en ren arbeidsbok. Når det kommer til grunnleggende Git-kommandoer, har du to alternativer:
git reset - hard
for å fjerne dine ubestemte endringer.Det tidligere alternativet mister alt arbeidet ditt mens sistnevnte resulterer i en delvis forpliktelse som ikke er meningsfylt. Ingen av disse scenariene er alt som er ønskelig.
Det er her git stash
kommandoen kommer inn i spill. Som git reset - hard
, Det gir deg en ren arbeidskatalog, men registrerer også dine ufullstendige endringer internt. Etter å ha fastsatt den kritiske feilen, kan du søke på nytt disse endringene og hente opp hvor du sluttet. Du kan tenke på git stash
som en "pause-knapp" for ditt igangværende arbeid.
Denne opplæringen antar at du har installert Git og at du er kjent med den grunnleggende arbeidsflyten. Du bør være komfortabel omplassering, skape forpliktelser og arbeide med grener. Du trenger også et Git-depot for å eksperimentere på.
Før du kan kjøre git stash
, Du må ha noen ubegrensede endringer i Git-depotet ditt. For eksempel, hvis du har redigert en fil som heter foo.py
, din git status
produksjonen vil se slik ut:
På grenmester Endringer ikke iscenesatt for commit: (bruk "git add... "for å oppdatere hva som vil bli forpliktet) (bruk" git checkout -- ... "for å forkaste endringer i arbeidskatalog) endret: foo.py
For å stash disse endringene, bare utfør git stash
uten argumenter.
git stash
Dette vil ta både dine iscenesatte og uendrede endringer, ta opp dem internt, og fjern deretter arbeidskatalogen. Dette gir deg muligheten til å bytte til en ny filial og utvikle andre funksjoner uten å bekymre deg for at partisk forpliktelse har noe å gjøre.
Når du er klar til å komme tilbake til ufullstendig arbeid, kjør følgende kommando for å gjenta de stashed endringene:
git stash pop
Den siste stashed-endringen vil vises i arbeidsboken din, og du kan fortsette nøyaktig hvor du sluttet. Det er alt der er til det.
Mye som git fusjon
kommando, git stash pop
kan føre til konflikter hvis de samme delene av kildekoden har endret seg siden du ble utført git stash
. Når dette skjer, ser du følgende melding etter kjøring git stash pop
:
Automatisk fusjonering foo.py CONFLICT (innhold): Slå sammen konflikt i foo.py
Du finner også den berørte filen som er oppført under Unmerged stier
delen i git status
utdata, samt de berørte linjene i kildefilen.
<<<<<<< Updated upstream print("Recently committed changes"); ======= print("Incomplete work"); >>>>>>> Stashed endringer
Du må manuelt løse konflikten i kildefilen, men du vil vanligvis ikke forplikte det umiddelbart som du ville etter en git fusjon
konflikt. Mesteparten av tiden fortsetter du å jobbe med uferdige funksjoner til du har utarbeidet et meningsfylt forpliktelse. Deretter kan du bare legge det til indeksen og forplikte det som vanlig. Med andre ord kan du behandle git stash pop
Konflikter, akkurat som alle andre ubegrensede endringer.
For de fleste scenarier er kommandoene ovenfor alt du trenger når det kommer til en "pause-knapp". Men å forstå hvordan stashed endringer er representert åpner døren for mer avansert bruk.
Så langt har vi bare snakket om å stashing ett enkelt endringssett. Men hver gang du kjører git stash
, Ubegrensede endringer lagres på en stabel. Dette betyr at du kan stash flere endringer på samme tid.
Dette er nyttig i de tidlige utviklingsstadiene når du ikke er sikker på hvilken retning du vil ta. I stedet for å miste endringene med git reset - hard
, Du kan beholde stillbildene dine på arbeidsplassen på stash-stakken hvis du vil gjenta en av dem senere.
Du kan inspisere stash-stakken med liste
parameter.
git stash listen
Hvis du tidligere hadde henrettet git stash
tre ganger, ville dette produsere noe som følgende:
stash @ 0: WIP på ny funksjon: 5cedccc Prøv noe gal stash @ 1: WIP på ny funksjon: 9f44b34 Ta en annen retning stash @ 2: WIP på ny funksjon: 5acd291 Start ny funksjon
De git stash pop
kommandoen gjenta alltid det nyeste stillbildet, den øverst på stash-stakken. Men det er også mulig å velge og velge hvilket stashed øyeblikksbilde du vil bruke på nytt med søke om
kommando. Hvis du for eksempel vil gjenta det andre settet med endringer, vil du bruke følgende kommando:
git stash gjelder stash @ 1
Akkurat som git stash pop
, Endringene vises igjen i arbeidskatalogen din, og du kan fortsette å jobbe med den ufullstendige funksjonen. Merk at dette ikke automatisk fjerner stillbilde fra stash-stakken. I stedet må du slette den manuelt med miste
kommando.
git stash drop stash @ 1
Igjen, å jobbe med stash-stakken er mer en kanten for de fleste Git-brukere. De git stash
og git stash pop
kommandoer bør være nok for de fleste av dine behov, selv om git stash listen
kan også vise seg nyttig hvis du glemte hvor din siste stashoperasjon fant sted.
Å legge til meningsfylte øyeblikksbilder ligger i hjertet av Git-arbeidsflyten. Formålfulle, innkapslede forpliktelser gjør det mye enklere å navigere i prosjektloggen, finne ut hvor bugs ble introdusert, og tilbakestille endringer.
Mens ikke akkurat en daglig kommando, git stash
kan være et veldig praktisk verktøy for å skape meningsfulle forpliktelser. Det tillater deg å lagre ufullstendig arbeid samtidig som du unngår behovet for å forplikte partielle stillbilder til din permanente prosjekthistorie. Husk det neste gang du ønsker at du kan stoppe hva du jobbet med og komme tilbake til det senere.