0%

Samenvoegen en conflicten

Lees een mergeconflict

Een mergeconflict is geen beschadigde repository. Het is een merge die pauzeert bij een beslissing die Git niet verantwoord kan nemen. De voorbereide repository staat nu stil: main voegde een Solo-pakket en chatondersteuning toe, terwijl simplify-tiers op dezelfde regels twee prijzen verhoogde.

Vraag Git waar de merge stopte

Je gebruikt git status al om de huidige branch en nog openstaande bestandswijzigingen te zien. Tijdens een merge meldt dezelfde opdracht ook dat er een merge bezig is en toont ze paden die unmerged zijn: nog niet samengevoegd.

Voer haar nu uit:

git status

Git noemt pricing.md onder Unmerged paths en zegt dat beide branches het hebben gewijzigd. De melding geeft ook twee veilige vervolgrichtingen: herstel het bestand en zet het klaar, of breek de merge af.

Lees de gemarkeerde alternatieven

Open het bestand met het conflict in de terminaleditor die je in hoofdstuk 2 leerde:

nano -w pricing.md

nano opent het bestand. -w voorkomt dat de editor harde regeleinden invoegt alleen omdat de terminal smal is. Sla nog geen wijziging op. Lees de drie markeringsregels die Git toevoegde:

<<<<<<< HEAD
Solo: 12 per month
Standard: 20 per month
Team: 60 per month
Support: email, and chat on Team
=======
Standard: 25 per month
Team: 75 per month
Support: email only
>>>>>>> simplify-tiers

De regel die met <<<<<<< begint, start de versie van de huidige branch. HEAD betekent de branch waarop je stond toen de merge begon: hier main. De regel met ======= scheidt de alternatieven. De regel die met >>>>>>> begint, sluit de versie van de andere branch af en noemt simplify-tiers.

De markeringen zijn geen versiering. Het is letterlijke bestandsinhoud. Zolang er een markering staat, is het bestand niet opgelost. Verlaat nano zonder op te slaan: druk op Ctrl-X en daarna op N als nano vraagt of je wilt opslaan.

De veilige weg terug

Soms begin je een merge en merk je dat je meer informatie nodig hebt om te beslissen. git merge --abort annuleert de mergepoging en probeert de toestand van vóór de merge te herstellen. Deze voorbereide merge begon met een schone werkboom, dus afbreken herstelt die schone toestand. Begin je een merge met niet-gecommitte bewerkingen, dan kan herstel daarvan lastig zijn, vooral als je ze tijdens de merge verder bewerkt. Daarom controleer je je werk en breng je het op orde vóór het samenvoegen. De optie --abort betekent dat deze lopende merge moet stoppen, in plaats van iets aan te maken of te combineren.

Oefen dat herstel nu:

git merge --abort
git status

De eerste opdracht verwijdert de lopende mergetoestand en conflictmarkeringen. De tweede bevestigt dat main weer schoon is. Van geen van beide branches zijn commits verwijderd. simplify-tiers staat nog klaar voor wanneer je het opnieuw wilt proberen.

Laat de repository in deze opgeruimde toestand staan. Je hebt nu één van de twee uitgangen uit een gepauzeerde merge gezien. De andere blijft beschikbaar: opnieuw beginnen doe je met dezelfde git merge simplify-tiers die je in les 1 las.

Wat stelt de tekst tussen <<<<<<< HEAD en ======= voor in een bestand met een conflict?

Wat doet git merge --abort tijdens een conflict?

Je hebt nu een conflict gezien zonder het te hoeven oplossen. Dat is de juiste volgorde: de toestand is minder spannend zodra je weet dat er aan beide kanten een deur zit. Voordat je door de andere deur gaat, laat de volgende les je ervaren wat dit hoofdstuk tot nu toe alleen beschreef: een merge die gewoon werkt.