Testa dig själv — Scenarios
Det enda sättet att lära sig hantera kaos är att öva i kontrollerat kaos. Allt det här går att återskapa i ett testmiljö-repo.
Skapa testmiljön en gång:
mkdir git-scenarios && cd git-scenariosgit initecho "start" > fil.txtgit add fil.txt && git commit -m "init"Scenario 1 — Du committade på fel branch
Skapa situationen:
# Se till att du är på main (utan att ha skapat en feature-branch)echo "ny funktion" >> fil.txtgit add fil.txtgit commit -m "feat: ny funktion"Committen hamnade på main — men den borde vara på feature/ny-funktion. Hur fixar du det?
Tips om du fastnar: kolla cherry-pick och reset.
Scenario 2 — Secrets råkade med i en commit
Skapa situationen:
echo "DB_PASSWORD=supersecret123" > .envgit add .envgit commit -m "add config"Frågor att besvara:
- Är committen pushad eller inte? Hur kontrollerar du?
- Hur tar du bort
.envfrån staging area utan att ta bort filen lokalt? - Vad är det allra första du bör göra om nyckeln redan är pushad och exponerad?
Scenario 3 — Merge-konflikten som inte vill lösa sig
Skapa situationen:
git switch -c feature/aecho "version A" > konflikt.txtgit add konflikt.txt && git commit -m "version A"
git switch mainecho "version B" > konflikt.txtgit add konflikt.txt && git commit -m "version B"
git merge feature/aNu har du en konflikt. Lös den manuellt (öppna filen, välj rätt version, ta bort konfliktmarkörerna) och avsluta mergen.
Scenario 4 — Rebase röran
Skapa situationen:
git switch -c feature/becho "rad 1" >> fil.txt && git add fil.txt && git commit -m "rad 1"echo "rad 2" >> fil.txt && git add fil.txt && git commit -m "rad 2"
git switch mainecho "main-ändring" >> fil.txt && git add fil.txt && git commit -m "main-ändring"
git switch feature/bgit rebase mainOm det uppstår konflikter — lös dem och kör git rebase --continue. Om det kör iväg: git rebase --abort tar dig tillbaka till läget innan rebase.
Scenario 5 — Hitta buggen (bisect)
Skapa en historik med en “bugg” inbäddad:
for i in 1 2 3 4 5; do echo "commit $i" >> logg.txt [ $i -eq 3 ] && echo "BUG" >> logg.txt git add logg.txt && git commit -m "commit $i"doneNu vet du att “BUG” finns någonstans i historiken. Använd git bisect för att hitta exakt vilken commit som introducerade den.
Ledtråd: git bisect start, git bisect bad, git bisect good <hash>, och git bisect reset när du är klar.
Scenario 6 — Återskapa förlorad kod via reflog
Skapa situationen — och förstör sedan medvetet:
echo "viktig kod" >> viktig.txtgit add viktig.txt && git commit -m "viktig commit"
# Ångra committen hårt — koden verkar försvunnengit reset --hard HEAD~1Koden är “borta”. Återskapa den med git reflog.
Quiz — Sant eller falskt?
git reset --hardkan återskapa commits som tappats medgit reflog.- Om du råkat commita ett lösenord som redan är pushat räcker det att ta bort filen i nästa commit.
- En merge-konflikt uppstår alltid när två branches ändrat exakt samma rad.
git rebase --abortär alltid säkert att köra.git bisectkräver att du vet vilken commit som introducerade buggen.