Git

Git Stash med navn

Git Stash med navn

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 --online
d79f7aa 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-status
Om filialfunksjon 1
Endringer ikke iscenesatt for forpliktelse:
(bruk "git add ... "for å oppdatere hva som blir forpliktet)
(bruk "git checkout -- ... "for å forkaste endringer i arbeidskatalogen)
 
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 master
feil: 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 stash
Lagret 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-liste
stash @ 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 master
Byttet 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 1

Din b.txt er fortsatt tom:

$ katt b.tekst
$

Men hvis du får endringene fra stash ved hjelp av følgende kommando:

$ git stash gjelder
 
Om filialfunksjon 1
Endringer ikke iscenesatt for forpliktelse:
(bruk "git add ... "for å oppdatere hva som blir forpliktet)
(bruk "git checkout -- ... "for å forkaste endringer i arbeidskatalogen)
 
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

Jeg er i ferd med å endre dette til ..


Til

Jeg er i ferd med å endre dette til FERDIG

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 drop
Droppet 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-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 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 @ 1

Og 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 @ 2

Og stashen burde være borte:

$ git stash-liste
stash @ 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

Hvordan bruke GameConqueror Cheat Engine i Linux
Artikkelen dekker en guide om bruk av GameConqueror-juksemotoren i Linux. Mange brukere som spiller spill på Windows bruker ofte "Cheat Engine" -appli...
Beste spillkonsollemulatorer for Linux
Denne artikkelen vil liste opp populære programvare for spillkonsollemulering tilgjengelig for Linux. Emulation er et programvarekompatibilitetslag so...
Beste Linux Distros for spill i 2021
Linux-operativsystemet har kommet langt fra det originale, enkle, serverbaserte utseendet. Dette operativsystemet har forbedret seg enormt de siste år...