Sådan får du stash dine ændringer med tilknyttet navn og finder det bagefter
Udviklere skal ofte multitaske. Du arbejder muligvis på en ny funktion, og der kan være en anmodning om at rette en fejl. Eller du kan være hovedudvikler på flere projekter.
Når du skifter mellem opgaver, ønsker du nogle gange ikke at udføre ufærdigt arbejde. I disse tilfælde kan kommandoen git stash være en stor hjælp. Det giver dig mulighed for at stable dine ændringer og senere vende tilbage til det ufærdige arbejde uden at tilføje unødvendige forpligtelser til dine git-arkiver.
En arbejdsgang til Git Stash
Lad os initialisere en git-masterfilial og begå en fil ReadMe.txt.
$ mkdir my_project$ cd my_project /
$ git init
$ tryk på ReadMe.txt
$ git add -A
$ git commit -m "Initialiser"
Lad os nu tilføje en anden fil kaldet a.txt til mastergrenen.
$ touch a.txt$ git add -A
$ git commit -m "Tilføjet en.txt "
Hvis du tjekker historikken, ser du:
$ git log - onlined79f7aa Tilføjet en.txt
9434d7e Initialiser
Lad os nu oprette en feature1-gren og tilføje en b.txt-fil:
$ git filialfunktion1$ git checkout-funktion 1
$ touch b.txt
$ git add -A
$ git commit -m "Tilføjet b.txt "
Åbn din b.txt-fil i en editor og sæt i linjen:
Jeg er ved at ændre dette til ..Og gem filen. Hvis du kontrollerer din git-status, ser du følgende:
$ git statusOm filialfunktion1
Ændringer, der ikke er iscenesat for forpligtelse:
(brug "git add
(brug "git checkout --
ændret: b.txt
ingen ændringer tilføjet til commit (brug "git add" og / eller "git commit -a")
Antag, at du på dette tidspunkt får en anmodning om at opdatere a.txt-fil på mastergrenen. Men du er ikke færdig med b.txt-fil. Hvis du prøver at tjekke mastergrenen, får du følgende fejl:
$ git checkout masterfejl: Dine lokale ændringer af følgende filer overskrives ved kassen:
b.txt
Foretag dine ændringer, eller gem dem, inden du kan skifte filial.
Afbryder
Men du vil ikke begå det ufærdige arbejde i b.txt. Du kan bruge git stash i denne situation:
$ git stashGemt arbejdskatalog og indekstilstand WIP på funktion1: 2cfe39b Tilføjet b.txt
HEAD er nu på 2cfe39b Tilføjet b.txt
Hvis du markerer b.txt, den skal være tom:
$ kat b.txt$
Hvis du tjekker stashet, vil du se:
$ git stash-listestash @ 0: WIP på funktion1: 2cfe39b Tilføjet b.txt
Hvis du prøver at tjekke mastergrenen, skal du være i stand til at gøre det nu:
$ git checkout masterSkiftet til gren 'master'
Antag at du foretager de nødvendige ændringer på masteren og derefter går tilbage til feature1-grenen:
$ git checkout-funktion 1Din b.txt er stadig tom:
$ kat b.txt$
Men hvis du får ændringerne fra stash ved hjælp af følgende kommando:
$ git stash gælderOm filialfunktion1
Ændringer, der ikke er iscenesat for forpligtelse:
(brug "git add
(brug "git checkout --
ændret: b.txt
ingen ændringer tilføjet til commit (brug "git add" og / eller "git commit -a")
Stash Apply-kommandoen tog de stashede ændringer og anvendte den på b.txt-fil
Du kan gennemføre dit arbejde i b.txt min ændring af linjen
Til
Fortsæt nu og foretag dine ændringer:
$ git add -A$ git commit -m "Ændret b.txt ”
Anvendelse af et stash renser det ikke automatisk fra stashet. Du skal rense det manuelt:
$ git stash dropDroppede refs / stash @ 0 (0a66a16b32633e8d564d08e38254c491c1b1d3be)
Hvorfor Git Stash med navn?
Git stash er en stak. Så du kan fortsætte med at pile dine ændringer.
Antag at du tilføjer "X" til b.txt, stash det, tilføj et "Y" til b.txt, stash det og tilføj et “Z” til b.txt og stash det. Hvis du tjekker stash-historikken, kan du se noget som dette:
$ git stash-liste[e-mailbeskyttet] 0: WIP på funktion1: 2d6f515 Ændret b.txt
[e-mail-beskyttet] 1: WIP på funktion1: 2d6f515 Ændret b.txt
[e-mail-beskyttet] 2: WIP på funktion1: 2d6f515 Ændret b.txt
Du har ingen måde at vide, hvilken stash der har hvilken ændring. Når du stashing, kan du bruge gemmuligheden til at indsætte kommentarer. Du kan bruge kommentarerne til at vedhæfte et navn til din stash og gøre dem genkendelige:
$ git stash gem "X"Gemt arbejdsmappe og indekstilstand Om funktion1: X
HEAD er nu på 2d6f515 Modificeret b.txt
For at tilføje "X", "Y" og "Z" modifikation kan du få følgende i din stash ved hjælp af gemmuligheden for hvert stash:
$ git stash-listestash @ 0: Til funktion1: Z
stash @ 1: Til funktion1: Y
stash @ 2: Til funktion1: X
Nu har du et navn til hver ændring, du lagrede. Desværre kan du ikke bruge navnet til at hente stashet. Du bliver nødt til at bruge stash-nummeret. Antag, at du vil få din "Y" -ændring. Du kan se, at [e-mailbeskyttet] 1 er Y. Så du kan anvende denne ændring i din nuværende filial:
$ git stash anvend stash @ 1Og din b.txt skal have ændringerne fra [email protected] 1.
Du kan bruge den samme metode til at droppe en stash. Antag, du indser, at du ikke længere har brug for X-stash. Du kan bare bruge følgende kommando til at slette det stash:
$ git stash drop stash @ 2Og stashet burde være væk:
$ git stash-listestash @ 0: Til funktion1: Z
stash @ 1: Til funktion1: Y
Husk, at hvis du bruger anvendelses- og slipindstillingerne uden parametre, vil den bruge toppen af stakken ([e-mail-beskyttet] 0).
Konklusion
Kommandoen git stash er en effektiv måde at administrere dit arbejdsområde på. At beherske denne kommando hjælper dig med at arbejde mere effektivt.
Yderligere studier:
- https: // git-scm.com / book / da / v1 / Git-Tools-Stashing
Referencer:
Stack Overflow: Sådan navngives og hentes en stash-by-name-in-git