Hoppa till innehållet
AI-grafen
D· AI-utvecklareprogrammering· ca 45 min· grundläggande — ändras sällan· verifierad 2026-09-20

Git — versionshantering

Kunna committa, branscha, slå ihop och läsa historik — och förstå varför experiment kräver versionshantering.

Förkunskaper

Intuition

Git sparar ögonblicksbilder av hela projektet. Varje commit är ett läge du kan gå tillbaka till, med ett meddelande som säger varför.

De tre platserna en fil kan vara på:

arbetskatalog  --git add-->  staging  --git commit-->  historik
 (dina filer)               (det du                   (permanent)
                          tänker spara)

De kommandon du faktiskt använder:

KommandoGör
git statusvad har ändrats?
git add <fil>lägg till i nästa commit
git commit -m "..."spara ögonblicksbilden
git log --onelinevisa historiken
git diffvad skiljer?
git switch -c <namn>ny gren
git merge <gren>slå ihop

En gren är en egen utvecklingslinje. Du kan prova något galet utan att förstöra det som fungerar, och kasta bort det om det inte blev något.

Formellt

Varför ML-arbete kräver versionshantering mer än vanlig kod. Ett resultat är reproducerbart bara om du vet alla delar som gav det:

VadHur det versioneras
KodGit, som vanligt
Hyperparametrarkonfigurationsfil i Git, inte hårdkodat i en notebook
Datahash eller versionsnummer i Git; själva datan hos DVC, LakeFS eller ett artefaktlager
Miljörequirements.txt med låsta versioner, eller en container-tagg
Modellvikterartefaktlager, med en länk till commiten
Slumpfröi konfigurationen

Att spara koden men inte hyperparametrarna ger ett resultat du aldrig kan återskapa. Regeln: allt som påverkar resultatet ska gå att peka ut med ett commit-id.

AI-grafen gör precis det — varje labbkörning loggar commit, frö, indata-hash och miljö-tagg.

Vad som INTE ska ligga i Git:

NejVarförI stället
Hemligheter, API-nycklarhistoriken är permanent — en borttagen nyckel finns kvarVault, miljövariabler
Stora datafilerrepot blir ohanterligtDVC, objektlagring
Modellviktersamma sakartefaktlager
.ipynb_checkpoints, __pycache__brus i varje diff.gitignore

Den första raden är viktig och underskattad: en nyckel som någon gång committats ska betraktas som läckt, även om den tagits bort i en senare commit. Den finns kvar i historiken och i alla kloner. Rätt åtgärd är att byta nyckeln.

Merge-konflikter uppstår när två grenar ändrat samma rader. Git markerar dem:

<<<<<<< HEAD
lr = 0.001
=======
lr = 0.01
>>>>>>> experiment

Du redigerar filen till det du vill ha, tar bort markörerna, och git add + git commit. Konflikter är inte ett fel — de är Git som ber dig fatta ett beslut som den inte kan fatta åt dig.

Interaktivt

Gör hela flödet i terminalen. Tio minuter, och du har provat allt som räknas.

mkdir experiment && cd experiment && git init

# Första commiten
echo "lr = 0.001" > config.py
git add config.py
git commit -m "Utgångsläge: lr 0.001"

# Prova något på en gren
git switch -c hogre-lr
echo "lr = 0.01" > config.py
git commit -am "Prova lr 0.01"

# Under tiden ändras huvudgrenen
git switch main
echo "lr = 0.003" > config.py
git commit -am "Prova lr 0.003"

# Slå ihop → konflikt
git merge hogre-lr
# CONFLICT (content): Merge conflict in config.py

cat config.py          # titta på markörerna
echo "lr = 0.01" > config.py     # bestäm dig
git add config.py && git commit -m "Välj lr 0.01 efter jämförelse"

git log --oneline --graph --all

Tre kommandon som räddar dig när något gått fel:

LägeKommando
Ångra ändringar i en fil (inte committad)git restore <fil>
Ta bort en fil från staginggit restore --staged <fil>
Se vad du gjorde, även efter en misslyckad resetgit reflog

git reflog är den bästa nyheten för den som just trott sig ha förlorat arbete: Git glömmer nästan aldrig något på en vecka.

Behärskning innebär

  • Använder commit, branch, merge och log
  • Löser en enkel merge-konflikt
  • Förklarar varför ML-experiment kräver versionshantering

Logga in för att göra övningarna och bygga upp din behärskning.

Källor

Alla källor och licenser