Git stash med navn

Git stash med navn

Hvordan du kan stash endringene dine med tilhørende 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 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.tekst
$ git add -a
$ git commit -m "la til en.tekst"

Hvis du sjekker historien, vil du se:

$ git log --oneline
d79f7aa la til en.tekst
9434D7E Initialiserer

La oss nå lage en funksjon1 -gren og legge til en B.txt -fil:

$ git filial funksjon1
$ git Checkout Feature1
$ berøring b.tekst
$ git add -a
$ git commit -m "lagt til b.tekst"

Å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 stash
Lagret arbeidskatalog og indeksstilstand WIP på Feature1: 2CFE39B lagt til B.tekst
Hodet er nå på 2CFE39B lagt til B.tekst

Hvis du sjekker B.txt, det skal være tomt:

$ katt b.tekst
$

Hvis 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.tekst
$

Men 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

Jeg er i ferd med å endre dette til ..


Til

Jeg er i ferd med å endre dette til gjort

Gå nå foran og forplikte endringene dine:

$ git add -a
$ git commit -m "modifisert b.tekst"

Å 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 liste
stash@0: WIP på funksjon1: 2d6f515 modifisert b.tekst
stash@1: WIP på funksjon1: 2d6f515 modifisert b.tekst
stash@2: WIP på funksjon1: 2d6f515 modifisert b.tekst

Du 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).

Konklusjon

Git Stash -kommandoen er en kraftig måte å administrere arbeidsområdet ditt. Å mestre denne kommandoen vil hjelpe deg å jobbe mer effektivt.

Videre studier:
  • https: // git-cm.com/bok/en/v1/git-tools-stashing
Referanser:

Stack Overflow: How-to-name-and-retrieve-a-stash-by-name-in-git