Hurtig Tips Utnyttelse av kraften til Git Stash

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:

  • Løpe git reset - hard for å fjerne dine ubestemte endringer.
  • Ta opp ufullstendig arbeid som nytt forpliktelse.

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.

Forutsetninger

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å.

1. Stashing Changes

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.

2. Re-Applying Stashed Changes

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.

3. Løse konflikter

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.

4. Stash Stack

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.

Konklusjon

Å 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.