Wanneer je samenwerkt aan een project in Git, werk je vaak tegelijkertijd met anderen aan dezelfde bestanden. Git helpt om wijzigingen van verschillende mensen samen te voegen (merge), maar soms lukt dat niet automatisch. Dit gebeurt wanneer twee of meer mensen dezelfde regel in een bestand wijzigen. Dit noemen we een merge conflict.
Een merge conflict betekent dat Git niet weet welke versie de juiste is, en jij moet beslissen welke code behouden blijft.
Metafoor: Een gezamenlijke tekst schrijven
Stel je voor dat jij en een vriend een verslag schrijven in een schrift.
Jij schrijft op een pagina:
Ik hou van pizza.
Ondertussen, zonder dat jij het weet, heeft je vriend op dezelfde regel geschreven:
Ik hou van sushi.
Wanneer jij jouw versie inlevert, zegt de leraar: "Wacht, er zijn twee versies! Welke is correct?"
Dit is precies wat Git doet bij een merge conflict: het vraagt jou om te kiezen welke versie je wilt behouden.
Merge Conflicts in Git: Wanneer gebeuren ze?
Een merge conflict ontstaat meestal wanneer:
Je wijzigingen lokaal hebt gemaakt, maar iemand anders heeft intussen dezelfde regel gewijzigd in de remote repository.
Je probeert jouw code naar de server te pushen, maar Git weigert omdat er nieuwe wijzigingen zijn die je eerst moet verwerken.
Praktische Simulatie: Een Merge Conflict Oplossen
In deze oefening ga je een merge conflict zelf simuleren en oplossen.
Stap 1: Voorbereiding
Open een terminal en maak een nieuwe testmap:
Initialiseer een nieuwe Git-repository:
Maak een bestand bestand.txt en voeg de volgende regel toe:
Voeg het bestand toe aan Git en commit:
Koppel de repository aan een GitHub-repository (vervang <URL> door de echte URL van jouw repo):
Stap 2: Simuleer een wijziging op GitHub
Open jouw repository op GitHub.
Bewerk bestand.txt direct via de GitHub-interface en wijzig de regel naar:
Sla de wijziging op en commit direct naar de main branch.
Stap 3: Simuleer een lokale wijziging
Ga terug naar jouw terminal en bewerk lokaalbestand.txt.
Wijzig de regel naar:
Commit jouw wijziging lokaal:
Probeer nu je code naar GitHub te pushen:
🚨 Dit zal mislukken, omdat Git detecteert dat er wijzigingen op GitHub zijn die niet lokaal zijn binnengehaald!
Stap 4: Los het merge conflict op
Trek eerst de nieuwste wijzigingen op via een rebase:
Git zal melden dat er een merge conflict is:
Open VS Code en bekijk het bestand bestand.txt. Daar zie je iets zoals: