Utviklere må ofte multitaske. Du jobber kanskje med en ny funksjon, og det kan være en forespørsel om å fikse en feil. Eller du kan være hovedutvikler på flere prosjekter.
Når du bytter mellom oppgavene, vil du noen ganger ikke begå uferdige arbeid. I disse tilfellene kan Git Stash -kommandoen være en stor hjelp. Det lar deg stable endringene dine og senere komme tilbake til det uferdige arbeidet uten å legge unødvendige forpliktelser til Git -lagringene dine.
En arbeidsflyt for git stash
La oss initialisere en Git Master -gren og begå en fil Readme.tekst.
$ mkdir my_project
$ cd my_project/
$ git init
$ Touch Readme.tekst
$ git add -a
$ git commit -m "initialize"
La oss nå legge til en annen fil som heter a.txt til mastergrenen.
$ berøring a.tekstHvis du sjekker historien, vil du se:
$ git log --onelineLa oss nå lage en funksjon1 -gren og legge til en B.txt -fil:
$ git filial funksjon1Åpne din b.TXT -fil i en redaktør og sett inn linjen:
Jeg er i ferd med å endre dette til ..Og lagre filen. Hvis du sjekker git -statusen din, ser du følgende:
$ git status
På filialfunksjon1
Endringer ikke iscenesatt for forpliktelse:
(Bruk "git add ..." for å oppdatere det som blir begått)
(Bruk "Git Checkout - ..." for å forkaste endringer i arbeidskatalogen)
Endret: b.tekst
Ingen endringer lagt til for å forplikte seg (bruk "git add" og/eller "git commit -a")
Anta at du på dette stadiet får en forespørsel om å oppdatere a.txt -fil på mastergrenen. Men du er ikke ferdig med B.txt -fil. Hvis du prøver å sjekke ut mastergrenen, får du følgende feil:
$ git Checkout Master
Feil: Dine lokale endringer i følgende filer vil bli overskrevet av kassen:
b.tekst
Vær så snill, forplikte endringene dine eller stash dem før du kan bytte filialer.
Abort
Men du vil ikke begå det uferdige arbeidet i B.tekst. Du kan bruke Git Stash i denne situasjonen:
$ git stashHvis du sjekker B.txt, det skal være tomt:
$ katt b.tekstHvis du sjekker stashen, vil du se:
$ git stash liste
stash@0: WIP på funksjonen1: 2cfe39b lagt til b.tekst
Hvis du prøver å sjekke ut mastergrenen, bør du kunne gjøre det nå:
$ git Checkout Master
Byttet til filial 'master'
Anta at du gjør endringene som er nødvendige på mesteren og deretter går tilbake til Feature1 -grenen:
$ git Checkout Feature1
Din b.TXT er fremdeles tom:
$ katt b.tekstMen hvis du får endringene fra stashen ved å bruke følgende kommando:
$ git stash gjelder
På filialfunksjon1
Endringer ikke iscenesatt for forpliktelse:
(Bruk "git add ..." for å oppdatere det som blir begått)
(Bruk "Git Checkout - ..." for å forkaste endringer i arbeidskatalogen)
Endret: b.tekst
Ingen endringer lagt til for å forplikte seg (bruk "git add" og/eller "git commit -a")
Stash Apply -kommandoen tok de stashede endringene og brukte den på B.txt -fil
Du kan fullføre arbeidet ditt i B.txt min modifisering av linjen
Til
Gå nå foran og forplikte endringene dine:
$ git add -aÅ bruke en stash rengjør ikke den automatisk fra stashen. Du må rydde opp manuelt:
$ git stash drop
Droppet refs/stash@0 (0a66a16b32633e8d564d08e38254c491c1b1d3be)
Hvorfor git stash med navn?
Git Stash er en stabel. Slik at du kan fortsette å stable endringene dine.
Anta at du legger til “X” til B.txt, stash det, legg til en "y" til b.txt, stash det og legg til en "z" til b.txt og stash det. Hvis du sjekker Stash -historien, vil du se noe slikt:
$ git stash listeDu har ingen måte å vite hvilken Stash som har en endring. Når du stash, kan du bruke lagringsalternativet til å legge inn kommentarer. Du kan bruke kommentarene til å knytte et navn til stashen din og gjøre dem gjenkjennelige:
$ git stash lagre "x"
Lagret arbeidskatalog og indekstilstand på funksjon1: x
Hodet er nå på 2d6f515 modifisert b.tekst
For å legge til “X”, “Y” og “Z” -modifisering, kan du få følgende i stashen din ved å bruke lagringsalternativet for hver stash:
$ git stash liste
stash@0: på funksjon1: z
stash@1: på funksjon1: y
stash@2: på funksjon1: x
Nå har du et navn for hver endring du stas. Dessverre kan du ikke bruke navnet til å hente stashen. Du må bruke stashnummeret. Anta at du vil få din "y" endring. Du ser at stash@1 er y. Så du kan bruke den endringen på din nåværende gren:
$ git stash bruker stash@1
Og din b.TXT skal ha endringene fra stash@1.
Du kan bruke den samme metoden for å slippe en stash. Anta at du skjønner at du ikke trenger X Stash lenger. Du kan bare bruke følgende kommando for å slette den stashen:
$ git stash drop stash@2
Og stashen skal være borte:
$ git stash liste
stash@0: på funksjon1: z
stash@1: på funksjon1: y
Husk at hvis du bruker Apply and Drop -alternativene uten noen parametere, vil den bruke toppen av stabelen (stash@0).
Git Stash -kommandoen er en kraftig måte å administrere arbeidsområdet ditt. Å mestre denne kommandoen vil hjelpe deg å jobbe mer effektivt.
Stack Overflow: How-to-name-and-retrieve-a-stash-by-name-in-git