Git och repos – spara historik och samarbeta
Git håller reda på ändringar. Ett repo samlar projektet och dess historik. Förstå commits, branches och GitHub med ett enkelt exempel.
Kort sagt
Git är ett verktyg som håller reda på ändringar i filer. Du kan spara tydliga steg i arbetet, se vad som ändrats och samarbeta utan att skapa filer som heter slutlig-version-7-verkligen-slutlig.
Ett repo, kort för repository, är projektets versionshanterade samling av filer och historik. GitHub är en tjänst där du kan lagra och samarbeta kring repos. Git och GitHub är alltså inte samma sak – Git fungerar även lokalt, utan internet.
Se instruktionsfilmen
Filmen går igenom övningen med två commits och förklarar utvecklingsgrenar. Se filmen i videogalleriet eller använd spelaren längre ner på sidan. Pausa när du provar kommandona.
Ett exempel: en webbplats
Illustration: Du bygger en liten webbplats. Först finns en startsida. Sedan lägger du till kontaktuppgifter. Till sist förbättrar du menyn.
Med Git kan du spara tre tydliga steg:
Startsidans första version → Lägg till kontaktuppgifter → Gör menyn lättare att använda.
Varje sparat steg kallas en commit. Den representerar ett sparat tillstånd för de versionshanterade filerna, med ett meddelande och koppling till tidigare historik. Du kan jämföra stegen och se exakt vilka ändringar som gjorts.
Git passar särskilt bra för kod, Markdown och andra textfiler. Bilder och dokument kan också lagras, men är ofta svårare att jämföra och slå ihop. Stora binära filer kan behöva särskild hantering.
Begreppen på en sida
| Begrepp | Enkel förklaring |
|---|---|
| Repo | Projektets filer och Git-historik. |
| Commit | Ett sparat steg i historiken. |
| Staging | Urvalet av ändringar som ska ingå i nästa commit. |
| Branch | En namngiven utvecklingslinje där du kan arbeta vidare. |
| Merge | Att förena ändringar från olika utvecklingslinjer. |
| Remote | Ett namngivet annat repo, ofta på en server. |
| Clone | Att skapa en lokal kopia av ett befintligt repo, med historik. |
| Push | Att skicka lokala commits till ett remote-repo. |
| Pull | Att hämta och integrera ändringar från ett remote-repo. |
| Pull request | Ett förslag till ändringar som andra kan granska på exempelvis GitHub. |
En branch är inte en fullständig kopia av projektmappen. Tänk en etikett på en utvecklingslinje. När du byter branch uppdaterar Git normalt vilka filer du ser i arbetsmappen.
Spara filen är inte samma sak som en commit
Det finns tre steg:
- Arbetsmappen: Du redigerar och sparar en fil som vanligt.
- Staging: Du väljer vad nästa commit ska innehålla.
- Historiken: Du gör en commit som sparar det valda tillståndet.
En commit är lokal. Den skickas inte automatiskt till GitHub. Och en push gör inte automatiskt din webbplats publik – det krävs ett separat publiceringsflöde, även om det ibland startas automatiskt av en push.
Prova i en ny övningsmapp
Använd en tom övningsmapp, inte ett befintligt arbetsprojekt. Git behöver vara installerat. Öppna terminalen i övningsmappen och starta repot:
git init -b main
Skapa sedan filen README.md i övningsmappen med texten # Mitt projekt, med en vanlig textredigerare.
Om du inte redan har en författaridentitet i Git, konfigurera den för just detta övningsrepo. Ersätt exempelvärdena med det namn och den e-postadress du vill använda:
git config --local user.name "Ditt namn"
git config --local user.email "din-adress@example.com"
E-postadressen följer med commit-historiken och kan bli synlig om repot delas. På GitHub kan du använda din GitHub-provided noreply-adress om du vill skydda din privata adress. Inställningen ovan gäller bara detta repo.
Granska och spara därefter din första commit:
git status
git add README.md
git diff --cached
git commit -m "Lägg till projektbeskrivning"
git log --oneline
initgör övningsmappen till ett Git-repo.statusvisar vad som är ändrat och ännu inte sparat i historiken.addväljer filens nuvarande innehåll till nästa commit; det publicerar ingenting.diff --cachedvisar det valda innehållet innan du sparar steget.commitsparar steget. Git kan be dig konfigurera namn och e-post för commitens författare.logvisar historiken.
Ändrar du filen efter add behöver du välja den nya ändringen igen om den ska ingå. Det går också att välja delar av en fil, men börja med en fil i taget.
Så samarbetar ni
Illustration: Du vill förbättra webbplatsens meny utan att blanda in halvfärdigt arbete i huvudlinjen.
- Hämta projektet. Klona repot till din dator.
- Skapa en branch. Ge den ett namn som beskriver arbetet, exempelvis
tydligare-meny. - Gör små commits. Spara sammanhängande ändringar med tydliga meddelanden.
- Dela för granskning. Pusha branchen till rätt remote och öppna en pull request.
- Granska och testa. Kontrollera förändringen innan den slås ihop med huvudlinjen.
Om två personer ändrat samma del av en fil kan Git behöva hjälp. Det kallas en mergekonflikt: ni behöver bestämma vilket innehåll som ska finnas kvar. Det är inte ett tecken på att projektet är förstört.
Checklista före en commit eller push
- Jag har tittat på
git statusoch granskat ändringarna. - Commiten innehåller en sammanhängande förändring.
- Jag har inte lagt till lösenord, API-nycklar eller privata uppgifter.
- Jag vet vilket repo och vilken branch jag arbetar i.
- Innan push: jag vet vart ändringarna skickas och vem som kan se dem.
Viktigaste fallgropen
Att tro att Git sparar allt automatiskt eller ersätter en säkerhetskopia. Ändringar som inte finns i en commit är inte sparade i commit-historiken. En lokal commit skyddar inte mot att datorn försvinner.
En .gitignore kan hindra vissa ospårade filer från att läggas till av misstag, men tar inte bort hemligheter som redan hamnat i historiken. Om en API-nyckel läckt behöver den spärras eller bytas – att bara radera filen räcker inte.
Vad du kan göra nu
Skapa ett övningsrepo med en README. Gör en commit, ändra en mening och gör en till. Jämför ändringarna och förklara skillnaden mellan att spara en fil, göra en commit och pusha till ett remote.