Git

Git Stash med namn

Git Stash med namn

Hur man tar bort dina förändringar med tillhörande namn och hittar det efteråt

Utvecklare måste ofta multitaska. Du kanske arbetar med en ny funktion och det kan finnas en begäran om att åtgärda ett fel. Eller så kan du vara huvudutvecklare för flera projekt.

När du byter mellan uppgifter vill du ibland inte begå oavslutat arbete. I dessa fall kan git stash-kommandot vara till stor hjälp. Det låter dig stapla dina ändringar och senare komma tillbaka till det oavslutade arbetet utan att lägga till onödiga åtaganden i dina git-förråd.

Ett arbetsflöde för Git Stash

Låt oss initiera en git-masterfilial och begå en fil ReadMe.Text.

$ mkdir my_project
$ cd my_project /
$ git init
$ touch ReadMe.Text
$ git add -A
$ git commit -m "Initialisera"

Låt oss nu lägga till en annan fil som heter a.txt till huvudgrenen.

$ touch a.Text
$ git add -A
$ git commit -m "Lagt till en.Text"

Om du kontrollerar historiken ser du:

$ git log - online
d79f7aa Tillagt a.Text
9434d7e Initiera

Låt oss nu skapa en feature1-gren och lägga till en b.txt-fil:

$ git filialfunktion1
$ git kassafunktion 1
$ touch b.Text
$ git add -A
$ git commit -m "Lagt till b.Text"

Öppna din b.txt-fil i en redigerare och lägg i raden:

Jag håller på att ändra detta till ..

Och spara filen. Om du kontrollerar din git-status ser du följande:

$ git-status
Om filialfunktion 1
Ändringar som inte genomförs för att begå:
(använd "git add ... "för att uppdatera vad som kommer att göras)
(använd "git checkout -- ... "för att kassera ändringar i arbetskatalogen)
 
modifierad: b.Text
 
inga ändringar har lagts till förpliktelsen (använd "git add" och / eller "git commit -a")

Antag att du i det här skedet får en begäran om att uppdatera a.txt-fil på huvudgrenen. Men du är inte klar med b.txt-fil. Om du försöker kolla in huvudgrenen får du följande fel:

$ git checkout master
fel: Dina lokala ändringar av följande filer skrivs över i kassan:
b.Text
Snälla, gör dina ändringar eller stash dem innan du kan byta gren.
Avbryter

Men du vill inte begå det oavslutade arbetet i b.Text. Du kan använda git stash i den här situationen:

$ git stash
Sparad arbetskatalog och indextillstånd WIP på funktion1: 2cfe39b Tillagd b.Text
HEAD är nu på 2cfe39b Lagt till b.Text

Om du markerar b.txt, den ska vara tom:

$ katt b.Text
$

Om du kontrollerar stash ser du:

$ git stash-lista
stash @ 0: WIP på funktion1: 2cfe39b tillagd b.Text

Om du försöker kolla in huvudgrenen bör du kunna göra det nu:

$ git checkout master
Bytt till filial "master"

Antag att du gör de nödvändiga ändringarna på mastern och sedan går tillbaka till feature1-grenen:

$ git kassafunktion 1

Din b.txt är fortfarande tom:

$ katt b.Text
$

Men om du får ändringarna från stash med följande kommando:

$ git stash gäller
 
Om filialfunktion 1
Ändringar som inte genomförs för att begå:
(använd "git add ... "för att uppdatera vad som kommer att göras)
(använd "git checkout -- ... "för att kassera ändringar i arbetskatalogen)
 
modifierad: b.Text
 
inga ändringar har lagts till förpliktelsen (använd "git add" och / eller "git commit -a")

Kommandot stash Apply tog de stashed ändringarna och applicerade det på b.txt-fil
Du kan slutföra ditt arbete i b.txt min ändring av raden

Jag håller på att ändra detta till ..


Till

Jag håller på att ändra detta till Klar

Fortsätt nu och gör dina ändringar:

$ git add -A
$ git commit -m "Ändrad b.Text"

Att applicera en stash rensar inte automatiskt den från stashen. Du måste städa upp det manuellt:

$ git stash drop
Tappade ref / stash @ 0 (0a66a16b32633e8d564d08e38254c491c1b1d3be)

Varför Git Stash med namn?

Git stash är en stack. Så du kan fortsätta stapla dina ändringar.

Antag att du lägger till "X" till b.txt, stash det, lägg till ett "Y" till b.txt, stash det och lägg till ett “Z” i b.txt och stash den. Om du kontrollerar stashhistoriken ser du ungefär så här:

$ git stash-lista
[e-postskyddad] 0: WIP på funktion1: 2d6f515 Ändrad b.Text
[e-postskyddad] 1: WIP på funktion1: 2d6f515 Ändrad b.Text
[e-postskyddad] 2: WIP på funktion1: 2d6f515 Modifierad b.Text

Du har inget sätt att veta vilken stash som har vilken förändring. När du stashar kan du använda spara alternativet för att lägga till kommentarer. Du kan använda kommentarerna för att bifoga ett namn till din stash och göra dem igenkännliga:

$ git stash spara "X"
Sparad arbetskatalog och indexstatus På funktion1: X
HEAD är nu på 2d6f515 Modified b.Text

För att lägga till "X", "Y" och "Z" modifiering kan du få följande i din stash med spara alternativet för varje stash:

$ git stash-lista
stash @ 0: På funktion1: Z
stash @ 1: På funktion1: Y
stash @ 2: På funktion1: X

Nu har du ett namn för varje ändring du stashed. Tyvärr kan du inte använda namnet för att hämta stash. Du måste använda stash-numret. Antag att du vill få din "Y" -ändring. Du ser att [e-postskyddad] 1 är Y. Så du kan tillämpa ändringen på din nuvarande gren:

$ git stash applicera stash @ 1

Och din b.txt ska ha ändringarna från [e-postskyddad] 1.

Du kan använda samma metod för att släppa en stash. Antag att du inser att du inte behöver X-stash längre. Du kan bara använda följande kommando för att ta bort det stash:

$ git stash drop stash @ 2

Och stash borde vara borta:

$ git stash-lista
stash @ 0: På funktion1: Z
stash @ 1: På funktion1: Y

Kom ihåg att om du använder tillämpnings- och släppalternativen utan några parametrar kommer den att använda toppen av stapeln ([e-postskyddad 0)).

Slutsats

Kommandot git stash är ett kraftfullt sätt att hantera din arbetsyta. Att behärska detta kommando hjälper dig att arbeta mer effektivt.

Ytterligare studier:
  • https: // git-scm.com / book / sv / v1 / Git-Tools-Stashing
Referenser:

Stack Overflow: hur-namn-och-hämta-a-stash-by-name-in-git

Installera det senaste OpenRA-strategispelet på Ubuntu Linux
OpenRA är en Libre / Free Real Time Strategy-spelmotor som återskapar de tidiga Westwood-spelen som det klassiska Command & Conquer: Red Alert. Distri...
Installera senaste Dolphin Emulator för Gamecube & Wii på Linux
Dolphin Emulator låter dig spela dina valda Gamecube & Wii-spel på Linux Personal Computers (PC). Eftersom Dolphin Emulator är en fritt tillgänglig o...
Hur man använder GameConqueror Cheat Engine i Linux
Artikeln täcker en guide om hur du använder GameConqueror-fuskmotorn i Linux. Många användare som spelar spel på Windows använder ofta applikationen "...