Git Branching & Konflikthantering

Vad är en branchstrategi?

  • En strategi för hur man arbetar med branches
  • Hur man skapar, hanterar och slår samman branches
  • Kan variera mellan team och projekt

Vi ska kolla närmare på Git Flow och GitHub Flow

Branch-strategier: Git Flow

  • Lämplig för projekt med schemalagda releaser
  • Två huvudgrenar: main/master och develop
  • Passar desktop-appar, spel och inbäddad mjukvara

Git Flow: Stödgrenar

  • feature/* (för nya funktioner)
  • release/* (för releaseförberedelser)
  • hotfix/* (för akuta bugfixar)

GitHub Flow

  • Enklare alternativ till Git Flow
  • Endast en huvudgren: main
  • Feature branches för all utveckling
  • Perfekt för continuous deployment (t.ex. webbappar, SaaS)

GitHub Flow: Användning

  • Passar bäst för webapplikationer och SaaS
  • Fördelar:
    • Snabbare leveranser
    • Mindre komplexitet

Pull Requests

  • När en branch är klar
  • Teamet granskar koden
  • Slår samman till main/develop
  • Det finns två sätt att slå samman branches: Merge och Rebase

Merge och Rebase

  • Två sätt att lösa samma problem:
    • Slå samman två brancher
  • Merge: Skapar en ny merge-commit
  • Rebase: Flyttar dina commits ovanpå målbranchen

Merge

  • Skapar en ny merge-commit
  • Bevarar historiken
  • Bra när flera utvecklare jobbar i samma branch

Merge: Exempel

git checkout main
git merge feature-branch

Rebase

  • Flyttar dina commits ovanpå målbranchen
  • Ger linjär historik
  • Bra när du jobbar ensam i en branch

Rebase: Exempel

git checkout feature-branch
git rebase main

The golden rule

  • Använd inte rebase på publika brancher

Merge-konflikter: Grunderna

  • Uppstår när samma fil ändrats på samma ställe
  • Git kan inte automatiskt lösa skillnaderna - vilket git ofta kan göra i andra fall

Hantera konflikter: Steg 1

git status  # Visar filer med konflikter

Hantera konflikter: Steg 2

<<<<<<< HEAD
Din ändring
=======
Andra ändringen
>>>>>>> feature-branch

Hantera konflikter: Lösning

  1. Välj rätt version eller kombinera
  2. Markera som löst:
git add <filnamn>
git commit

Tips för att undvika konflikter

  • Pull ofta från main/develop
  • Kommunicera med teamet
  • Håll feature branches korta