Snabbtips Hantera kraften i Git Stash

Tänk dig att du arbetar med en funktion i ett Git-kontrollerat mjukvaruprojekt. Du är rätt i mitten av att göra några ändringar när du får en förfrågan om att fixa en kritisk bugg. För att börja lösa problemet behöver du en ny filial och en ren arbetsmapp. När det gäller grundläggande Git-kommandon har du två alternativ:

  • Springa git reset - hard för att ta bort dina icke-godkända ändringar.
  • Spela in ditt ofullständiga arbete som ett nytt engagemang.

Det tidigare alternativet förlorar allt ditt arbete medan den senare resulterar i ett partiellt åtagande som inte är meningsfullt. Ingen av dessa scenarier är allt som är önskvärt.

Det är här git stash kommando kommer in i spel. Tycka om git reset - hard, Det ger dig en ren arbetsmapp, men det registrerar också dina ofullständiga förändringar internt. Efter att du har fastställt den kritiska felet kan du tillämpa dessa ändringar och hämta upp var du slutade. Du kan tänka dig git stash som en pausknapp för ditt pågående arbete.

förutsättningar

Denna handledning förutsätter att du har installerat Git och att du är bekant med det grundläggande arbetsflödet. Du borde vara bekväma stegvisa förändringar, skapa förpliktelser och arbeta med grenar. Du behöver också ett Git-arkiv för att experimentera på.

1. Stashing Changes

Innan du kan springa git stash, Du måste ha några obestämda ändringar i ditt Git-arkiv. Om du till exempel redigerar en fil som heter foo.py, din git status utsignalen skulle se ut så här:

På grenmästare Ändringar inte iscensatte för commit: (använd "git add ... "för att uppdatera vad som kommer att begås) (använd" git checkout -- ... "för att avbryta ändringar i arbetsboken) modifierad: foo.py 

För att stash dessa ändringar, kör bara git stash utan några argument.

git stash 

Detta tar både dina iscensatte och ostegrade ändringar, registrerar dem internt och rensar sedan arbetsmappen. Det här ger dig möjlighet att byta till en ny filial och utveckla andra funktioner utan att oroa dig för att du deltar i partiell delning.

2. Tillämpa stashed ändringar

När du är redo att komma tillbaka till ditt ofullständiga arbete, kör följande kommando för att återanvända de stashed ändringarna:

git stash pop 

Den senaste stashed-ändringen kommer att visas i din arbetsmapp och du kan fortsätta exakt var du slutade. Det är allt som finns där.

3. Att lösa konflikter

Mycket som git-sammanslagning kommando, git stash pop kan leda till konflikter om samma delar av källkoden har ändrats sedan du körde git stash. När detta händer ser du följande meddelande efter körning git stash pop:

Automatisk sammanslagning foo.py CONFLICT (innehåll): Sammanfoga konflikt i foo.py 

Du hittar också den drabbade filen som anges under Unmerged paths avsnitt i git status utdata, liksom de drabbade raderna i källfilen.

<<<<<<< Updated upstream print("Recently committed changes"); ======= print("Incomplete work"); >>>>>>> Stashed förändringar 

Du måste manuellt lösa konflikten i källfilen, men du brukar inte begå den omedelbart som om du skulle efter en git-sammanslagning konflikt. För det mesta fortsätter du att arbeta med din oavslutade funktion tills du har förberett ett meningsfullt engagemang. Då kan du helt enkelt lägga till det i indexet och begå det som vanligt. Med andra ord kan du behandla git stash pop konflikter precis som alla andra obestämda förändringar.

4. Stash Stack

För de flesta scenarier är ovanstående kommandon allt du behöver när det gäller en pausknapp. Men förstå hur stashed förändringar är representerade öppnar dörren för mer avancerad användning.

Hittills har vi bara pratat om att stashing en enda förändring. Men varje gång du kör git stash, Obligatoriska ändringar lagras på en stapel. Det betyder att du kan stash flera ändringsprogram samtidigt.

Detta är användbart i de tidiga utvecklingsstadierna när du inte är säker på vilken riktning du vill ta. I stället för att förlora dina ändringar med git reset - hard, du kan hålla dina pågående ögonblicksbilder på stash-stacken om du vill tillämpa en av dem senare.

Du kan inspektera stash-stacken med lista parameter.

git stash lista 

Om du tidigare hade kört git stash tre gånger, skulle detta ge något som följande:

stash @ 0: WIP på ny funktion: 5cedccc Prova något galet stash @ 1: WIP på ny funktion: 9f44b34 Ta en annan riktning stash @ 2: WIP på ny funktion: 5acd291 Börja ny funktion 

De git stash pop kommandot tillämpar alltid den senaste ögonblicksbilden, den som är överst på stash-stacken. Men det är också möjligt att välja och välja vilken stashed ögonblicksbild som du vill använda igen med tillämpa kommando. Om du till exempel vill tillämpa den andra uppsättningen av ändringar, skulle du använda följande kommando:

git stash tillämpa stash @ 1

Precis som git stash pop, ändringarna kommer att visas igen i din arbetsregister och du kan fortsätta arbeta med den ofullständiga funktionen. Observera att detta inte automatiskt tar bort ögonblicksbilden från stash-stacken. Istället måste du manuellt radera det med släppa kommando.

git stash drop stash @ 1

Återigen är arbetet med stash-stacken mer av ett kantfall för de flesta Git-användare. De git stash och git stash pop Kommandon bör räcka för de flesta av dina behov, även om git stash lista kan också vara användbar om du glömde var din sista stash-operation ägde rum.

Slutsats

Att begå meningsfulla ögonblicksbilder ligger i hjärtat av alla Git-arbetsflöden. Formålliga, inkapslade fördrag gör det mycket lättare att navigera i projekthistoriken, ta reda på var fel har introducerats och återställa förändringar.

Medan inte exakt en daglig kommando, git stash kan vara ett mycket bekvämt verktyg för att skapa meningsfulla förpliktelser. Det låter dig lagra ofullständigt arbete samtidigt som du undviker behovet av att begå partiella snapshots till din permanenta projekthistorik. Kom ihåg nästa gång du önskar att du kan pausa vad du än jobbat på och komma tillbaka till det senare.