Hvordan du kan lagre endringene dine med tilknyttet navn og finne det etterpå
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 oppgaver, vil du noen ganger ikke begå uferdig arbeid. I disse tilfellene kan kommandoen git stash være til god hjelp. Det lar deg stable endringene dine og senere komme tilbake til det uferdige arbeidet uten å legge unødvendige forpliktelser til git-arkivene dine.
En arbeidsflyt for Git Stash
La oss initialisere en git-hovedfilial 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 kalt a.txt til mastergrenen.
$ berør a.tekst$ git add -A
$ git commit -m "Lagt til en.tekst"
Hvis du sjekker historikken, ser du:
$ git log --onlined79f7aa Lagt til en.tekst
9434d7e Initialiser
La oss nå lage en feature1-gren og legge til en b.txt-fil:
$ git gren funksjon 1$ git utsjekkingsfunksjon 1
$ touch b.tekst
$ git add -A
$ git commit -m "Lagt til b.tekst"
Åpne b.txt-fil i en redaktør og satt i linjen:
Jeg er i ferd med å endre dette til ..Og lagre filen. Hvis du sjekker git-statusen din, ser du følgende:
$ git-statusOm filialfunksjon 1
Endringer ikke iscenesatt for forpliktelse:
(bruk "git add
(bruk "git checkout --
endret: b.tekst
ingen endringer lagt til forpliktelsen (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å hovedgrenen. Men du er ikke ferdig med b.txt-fil. Hvis du prøver å sjekke ut hovedgrenen, får du følgende feil:
$ git checkout masterfeil: Dine lokale endringer i følgende filer vil bli overskrevet ved kassen:
b.tekst
Vennligst gjør endringene dine eller lagre dem før du kan bytte gren.
Avbryter
Men du vil ikke begå det uferdige arbeidet i b.tekst. Du kan bruke git stash i denne situasjonen:
$ git stashLagret arbeidskatalog og indeksstatus WIP på funksjon1: 2cfe39b Lagt til b.tekst
HEAD er nå på 2cfe39b Lagt til b.tekst
Hvis du sjekker b.txt, den skal være tom:
$ katt b.tekst$
Hvis du sjekker stashen, ser du:
$ git stash-listestash @ 0: WIP på funksjon1: 2cfe39b Lagt til b.tekst
Hvis du prøver å sjekke ut hovedgrenen, bør du kunne gjøre det nå:
$ git checkout masterByttet til gren 'master'
Anta at du gjør de endringene som er nødvendige på masteren og deretter går tilbake til feature1-grenen:
$ git utsjekkingsfunksjon 1Din b.txt er fortsatt tom:
$ katt b.tekst$
Men hvis du får endringene fra stash ved hjelp av følgende kommando:
$ git stash gjelderOm filialfunksjon 1
Endringer ikke iscenesatt for forpliktelse:
(bruk "git add
(bruk "git checkout --
endret: b.tekst
ingen endringer lagt til forpliktelsen (bruk "git add" og / eller "git commit -a")
Kommandoen Stash Apply tok de endrede endringene og brukte den på b.txt-fil
Du kan fullføre arbeidet ditt i b.txt min endring av linjen
Til
Fortsett og fortsett med endringene dine:
$ git add -A$ git commit -m "Endret b.tekst"
Bruk av stash renser det ikke automatisk fra stashet. Du må rydde opp manuelt:
$ git stash dropDroppet ref / stash @ 0 (0a66a16b32633e8d564d08e38254c491c1b1d3be)
Hvorfor Git Stash med navn?
Git stash er en stabel. Så du kan fortsette å pile endringene.
Anta at du legger til "X" i b.tekst, stash den, legg til en "Y" til b.tekst, stash den og legg til en "Z" i b.tekst og stash den. Hvis du sjekker stash-historikken, ser du noe sånt som dette:
$ git stash-liste[e-postbeskyttet] 0: WIP på funksjon1: 2d6f515 Endret b.tekst
[e-postbeskyttet] 1: WIP på funksjon1: 2d6f515 Endret b.tekst
[e-postbeskyttet] 2: WIP på funksjon1: 2d6f515 Endret b.tekst
Du har ingen måte å vite hvilken stash som har hvilken endring. Når du stasher, 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
HEAD er nå på 2d6f515 Modifisert b.tekst
For å legge til "X", "Y" og "Z" modifikasjon, kan du få følgende i din stash ved hjelp av lagringsalternativet for hvert stash:
$ git stash-listestash @ 0: På funksjon1: Z
stash @ 1: På funksjon1: Y
stash @ 2: På funksjon1: X
Nå har du et navn for hver endring du stashed. Dessverre kan du ikke bruke navnet til å hente stashen. Du må bruke stash-nummeret. Anta at du vil få “Y” -endringen. Du ser at [e-postbeskyttet] 1 er Y. Så du kan bruke den endringen i din nåværende gren:
$ git stash gjelder stash @ 1Og din b.txt skal ha endringene fra [e-postbeskyttet] 1.
Du kan bruke samme metode 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 @ 2Og stashen burde være borte:
$ git stash-listestash @ 0: På funksjon1: Z
stash @ 1: På funksjon1: Y
Husk at hvis du bruker alternativene for bruk og slipp uten parametere, vil den bruke toppen av bunken ([e-postbeskyttet] 0).
Konklusjon
Kommandoen git stash er en kraftig måte å administrere arbeidsområdet på. Å mestre denne kommandoen vil hjelpe deg å jobbe mer effektivt.
Videre studier:
- https: // git-scm.com / book / no / v1 / Git-Tools-Stashing
Referanser:
Stack Overflow: hvordan-navn-og-hente-en-stash-av-navn-i-git