När en kollega har uppdaterat en gren och du vill se ändringarna utan att störa ditt pågående arbete är git fetch oftast ett tryggt första steg. Kommandot hämtar nya Git-objekt och uppdaterar referenser till fjärrens grenar, men det ändrar normalt inte din utcheckade gren; exakt vad som uppdateras beror på fjärrinställningarna.
![]()
Hämta först, välj sedan hur ändringarna ska integreras
- Hämtning:
git fetchuppdaterar information om fjärrens grenar utan att automatiskt slå ihop dem med din lokala gren. - Granska: jämför din gren med exempelvis
origin/maininnan du väljer merge eller rebase. - Standardval:
git fetch originhämtar enligt fjärrens konfiguration, ofta flera grenar. - Städa:
git fetch --prune origintar bort lokala fjärrreferenser till grenar som raderats på servern.
Din lokala gren står still medan fjärrspåren uppdateras
Tänk på origin/main som en lokal anteckning om var fjärrens main-gren senast befann sig. När du hämtar uppdateras den anteckningen, medan din egen main och dina arbetsfiler normalt ligger kvar där de är. Jag tycker att den uppdelningen gör kommandot särskilt användbart när du vill inspektera andras ändringar innan du bestämmer dig.
Git hämtar de objekt och referenser som behövs för historiken och skriver information om hämtade referenser till .git/FETCH_HEAD. En remote-tracking branch, som origin/main, är alltså en lokal referens till fjärrens gren, inte en gren som någon annan direkt ändrar i din arbetskatalog. Git-dokumentationen för git-fetch beskriver hur fjärrreferenser och hämtade objekt hanteras.
Välj kommandot efter hur mycket du vill hämta
Om projektets fjärr heter origin räcker ofta det korta kommandot git fetch. Har du flera fjärrar, eller vill du begränsa hämtningen, ange namn eller gren uttryckligen.
| Situation | Kommando | Vad det gör |
|---|---|---|
| Hämta enligt konfigurationen för en fjärr | git fetch origin |
Hämtar de referenser som fjärrens fetch-inställning omfattar. |
| Hämta från alla konfigurerade fjärrar | git fetch --all |
Hämtar från samtliga fjärrar som inte har undantag för detta. |
| Hämta en viss gren | git fetch origin feature/checkout |
Begär uppdateringar för den angivna grenen. |
| Hämta och rensa bort gamla fjärrspår | git fetch --prune origin |
Tar bort lokala remote-tracking-referenser för grenar som inte längre finns på fjärren. |
En detalj som lätt missas är att en fjärrs fetch-konfiguration avgör vilka referenser som hämtas när du inte anger en gren. Med en explicit gren på kommandoraden styr den i stället bland annat mappningen till lokala fjärrspår. Det kan förklara varför ett kommando inte uppdaterar den gren du väntade dig.
Jämför innan du väljer merge eller rebase
Efter hämtningen kan du jämföra den lokala grenen med fjärrspåret. Till exempel visar git log --oneline main..origin/main de commits som finns på origin/main men ännu inte på din lokala main. Om du vill se filskillnader kan git diff main..origin/main ge en snabb överblick.
Ta ett typiskt fall: du arbetar lokalt på main, medan en kollega har lagt till två commits på fjärrens main. Efter git fetch origin visar jämförelsen två nya commits, men din lokala gren har inte flyttats. Då kan du välja git merge origin/main för att slå ihop historiken eller git rebase origin/main för att lägga dina lokala commits ovanpå fjärrens uppdatering. GitHubs guide till att hämta ändringar från ett fjärrarkiv skiljer också mellan hämtning och integrering.
En gammal gren kan finnas kvar trots att den raderats på servern
Raderar någon en gren på fjärren försvinner den lokala referensen inte nödvändigtvis vid nästa vanliga hämtning. Då kan git branch -r fortfarande visa ett gammalt namn, vilket ser ut som om grenen lever kvar fast den inte längre finns på servern.
| Situation | Trolig förklaring | Gör så här |
|---|---|---|
git branch -r visar en gren som raderats på fjärren |
Den lokala fjärrreferensen har inte rensats. | Kör git fetch --prune origin och kontrollera listan igen. |
| Din lokala gren ändras inte efter hämtningen | Fetch hämtar och uppdaterar fjärrspår, men integrerar inte automatiskt ändringarna i den lokala grenen. | Granska jämförelsen och välj sedan merge eller rebase. |
| En väntad fjärrgren saknas efter hämtning | Grenen kan saknas på fjärren eller ligga utanför fjärrens konfigurerade refspec. | Kontrollera fjärrnamn och gren, exempelvis med git remote -v. |
Prune tar bort lokala fjärrreferenser som inte längre motsvarar grenar på servern; det raderar inte dina lokala arbetsgrenar. Om du vill se vad som skulle hämtas utan att uppdatera referenserna kan du använda git fetch --dry-run origin.
Låt fetch vara kontrollpunkten före ändringen
En enkel tumregel fungerar i de flesta arbetsflöden: vill du först granska vad som hänt, kör git fetch; vill du hämta och direkt integrera ändringarna, välj git pull och kontrollera hur pull är konfigurerat. Pull utför en hämtning och följer sedan inställningarna för integrering, till exempel merge eller rebase.
När en webbplats eller ett digitalt projekt utvecklas tillsammans med andra minskar den här kontrollpunkten risken för överraskningar i den aktuella grenen. Hämta, jämför och välj sedan hur historiken ska gå vidare. Det är ett litet extra steg som ger dig beslutet tillbaka i händerna.