Grenar i Git

Slutförd

Du är webbutvecklare och försöker lära dig mer om Git för ditt jobb. Du har skapat en enkel HTML- och CSS-webbplats som innehåller kattfoton för att öva dina Git-kunskaper, och du har arbetat med den med dina vänner, Alice och Bob.

När projektet fortskrider inser du att du vill att alla ska kunna arbeta med fler än en uppgift i taget utan att komma i vägen för en annan persons arbete. Du behöver ett sätt att hålla allas arbete separat, så att ny utveckling inte kommer i vägen för befintliga felkorrigeringar. I Git gör grenar den här typen av samarbete enkelt.

Det arbete som utförs på en gren behöver inte delas och det stör inte arbete som utförs på andra grenar. Med grenar kan du hålla incheckningar relaterade till varje ämne tillsammans och isolerade från annat arbete, så ändringar som görs i ett ämne är lätta att granska och spåra.

Modern programvaruutveckling sker nästan helt i grenar. Målet är att hålla huvudgrenen ren tills arbetet är klart att checka in. Sedan skickar du ändringarna till huvudgrenen, eller ännu bättre, skickar en pull-begäran för att sammanfoga ändringarna.

En fördel som Git har jämfört med tidigare versionskontrollsystem (VCS) är att det är extremt snabbt att skapa en gren med Git. det innebär att skriva en hash på 40 tecken till en fil under .git/heads. Det går också snabbt att byta grenar eftersom Git lagrar hela filer och packar upp dem i stället för att försöka rekonstruera dem från listor med ändringar. Sammanslagning i Git är inte riktigt lika enkelt, men det är enkelt och ofta helt automatiskt.

Nu ska vi berätta vad grenar är, hur de används och hur de fungerar.

Grenstruktur och namngivning

En gren är helt enkelt en kedja med incheckningar som förgrenar sig från huvudlinjen, som en gren i ett träd.

Om du byter till Git från en annan VCS kan du vara van vid lite annorlunda terminologi. VCS Subversion namnger sin standardgren trunk, medan Git namnger den master. Du kan byta namn på standardgrenen på samma sätt som du kan byta namn på en annan gren. I den här modulen namnger vi standardgrenen main.

En gren börjar vanligtvis med en incheckning på standardgrenen. i det här fallet på main. Grenen växer en separat historikkedja när incheckningar läggs till. Så småningom sammanfogas ändringarna i grenen tillbaka till main. I den här modulen lär du dig att göra incheckningar i en gren och sammanfoga dem i grenen main .

Anta att du förgrenar grenen main . Så här visualiserar vi det som händer:

Ett diagram som visar relationen mellan huvudgrenen och de lokala grenarna.

Varje versal bokstav i diagrammet representerar ett genomförande. Grenar har namn som add-authentication och fix-css-bug, och grenar kan ha egna grenar. Det slutliga målet är att låta utvecklare göra vad de behöver göra utan att trampa på varandra, och att sluta med en huvudgren som representerar alla inblandades bästa ansträngningar.

Skapa och växla grenar (git-gren och git-kassa)

En vanlig orsak till att skapa en ny gren är att göra ändringar i en befintlig funktion. En gren för detta ändamål kallas ofta för ämnesgren eller funktionsgren.

Du kan skapa en ny gren med hjälp git branch av kommandot . Växla mellan grenar med hjälp git checkout av kommandot .

Du har redan stött på checkout ett sätt att ersätta filer i arbetsträdet genom att hämta dem från indexet. Utan sökvägar i argumentlistan checkout uppdateras allt i arbetsträdet och indexet så att det matchar den angivna incheckningen – i det här fallet grenens huvud.

Sammanfoga grenar (git-sammanslagning)

När du har slutfört en del arbete i en gren, kanske en funktion eller en felkorrigering, vill du slå samman den grenen igen till huvudgrenen. Du kan använda git merge kommandot för att sammanfoga en specifik gren till din aktuella gren.

Om du till exempel arbetade i en gren med namnet my-featureskulle arbetsflödet se ut så här:

# Switch back to the main branch
git checkout main

# Merge my-feature branch into main
git merge my-feature

När du har använt dessa kommandon och löst eventuella sammanslagningskonflikter (vi beskriver sammanslagningskonflikter senare i den här modulen) skulle alla ändringar från din my-feature gren finnas i main.