Home » Begrippen » Wat is branching?

Wat is branching?

Branching is een kernfunctie van versiebeheersystemen zoals Git waarmee je een parallelle ontwikkellijn aanmaakt die losstaat van de hoofdcode. Je kunt hiermee een nieuwe functie bouwen, een bug oplossen of een experiment uitvoeren zonder de stabiele codebase te verstoren. Een branch is in essentie een afzonderlijke kopie van de code waarop je veilig wijzigingen kunt doorvoeren. Zodra de wijzigingen klaar en getest zijn, voeg je de branch samen met de hoofdlijn via een zogenoemde merge of pull request. Grote teams gebruiken branching om tientallen functies tegelijk te ontwikkelen zonder dat ontwikkelaars elkaars werk in de weg zitten.

Hoe werkt een branch in Git?

In Git is een branch niets meer dan een verwijzing naar een specifieke commit in de geschiedenis van je repository. Wanneer je een nieuwe branch aanmaakt met git branch naam of git checkout -b naam, wordt er een nieuwe pointer aangemaakt die begint bij de commit waar je op dat moment staat. Elke nieuwe commit die je daarna doet, beweegt die pointer vooruit, terwijl de originele branch op zijn plek blijft.

Git slaat geen volledige kopieën van bestanden op bij elke branch. In plaats daarvan werkt Git met een delta-model: alleen de verschillen worden bijgehouden. Dit maakt branches extreem lichtgewicht en snel aan te maken, zelfs in repositories met jaren aan geschiedenis.

De main of master branch

De hoofdbranch heet traditioneel master, maar in modernere projecten wordt steeds vaker main gebruikt. Dit is de stabiele lijn van de codebase die in productie draait. Alle andere branches worden uiteindelijk samengevoegd met deze hoofdlijn nadat de code is beoordeeld en getest.

Feature branches

De meest voorkomende toepassing van branching is de feature branch. Je maakt een aparte branch aan voor elke nieuwe functionaliteit, werkt daar aan totdat de feature klaar is, en opent dan een pull request om de wijzigingen te laten reviewen en samen te voegen. Dit houdt de hoofdlijn schoon en stabiel terwijl meerdere ontwikkelaars parallel kunnen werken.

Veelgebruikte branch-strategieën

Verschillende teams hanteren verschillende afspraken over hoe branches worden aangemaakt, benoemd en samengevoegd. De keuze voor een strategie heeft grote invloed op de samenwerking en de snelheid van software-uitlevering.

Git Flow

Git Flow is een van de bekendste branch-strategieën. Hierbij werk je met vaste branches voor ontwikkeling (develop), releases (release/x.x) en hotfixes (hotfix/). Elke nieuwe feature krijgt een eigen branch die vertrekt vanuit develop. Wanneer een release klaar is, wordt die naar zowel main als develop samengevoegd. Git Flow biedt veel structuur maar kan omslachtig zijn voor teams die regelmatig kleine updates willen uitrollen.

GitHub Flow

GitHub Flow is een eenvoudigere aanpak waarbij je altijd vanuit main vertakt, de wijzigingen in een feature branch zet, een pull request opent en na goedkeuring direct naar main samenvoegt. De aanname is dat main altijd deploybaar is. Dit werkt goed voor teams die continu leveren en geen complexe release-cycli hebben.

Trunk-Based Development

Bij trunk-based development werken alle ontwikkelaars rechtstreeks op de hoofdlijn of via zeer korte branches die dezelfde dag nog worden samengevoegd. Nieuwe functies die nog niet klaar zijn, worden verborgen achter feature flags. Deze aanpak minimaliseert merge-conflicten en sluit goed aan bij CI/CD-pipelines.

Mergen en merge-conflicten

Wanneer je een branch terugvoegt naar de hoofdlijn, spreek je van een merge. Git probeert wijzigingen automatisch samen te voegen. Als twee branches hetzelfde deel van hetzelfde bestand hebben gewijzigd, ontstaat er een merge-conflict. Git markeert de conflicterende regels in het bestand en vraagt jou om te bepalen welke versie behouden moet blijven.

Een veelgebruikt alternatief voor een reguliere merge is rebase. Bij een rebase worden jouw commits van de feature branch opnieuw afgespeeld bovenop de laatste stand van de doelbranch. Het resultaat is een lineaire geschiedenis zonder merge-commits, wat de commit-log overzichtelijker maakt. Het nadeel is dat rebase de bestaande commits herschrijft, wat problemen kan geven als de branch al gedeeld is met anderen.

Pull requests en code review

Een pull request (PR) — in GitLab ook wel merge request (MR) genoemd — is een verzoek om de wijzigingen in een branch samen te voegen met een andere branch. Pull requests zijn de plek waar code review plaatsvindt: teamgenoten kunnen de wijzigingen bekijken, opmerkingen plaatsen en goedkeuring geven voordat de code wordt samengevoegd.

Goede pull requests zijn klein en gefocust. Een PR met duizenden gewijzigde regels is moeilijk te reviewen en vergroot de kans dat fouten worden gemist. Veel teams stellen een maximum aan het aantal gewijzigde regels per PR en hanteren duidelijke beschrijvingen van wat er is gewijzigd en waarom.

Geautomatiseerde checks — zoals tests, linters en beveiligingsscans — worden vaak gekoppeld aan pull requests via CI/CD-pipelines. Pas wanneer alle checks slagen en de vereiste reviewers hebben goedgekeurd, kan de branch worden samengevoegd.

Naamgeving en hygiëne van branches

Goede afspraken over naamgeving maken branches direct begrijpelijk. Gangbare patronen zijn:

  • feature/naam-van-de-functie — voor nieuwe functionaliteit
  • bugfix/beschrijving-van-de-bug — voor foutopsporing
  • hotfix/urgent-probleem — voor spoedoplossingen in productie
  • release/1.4.0 — voor het voorbereiden van een release
  • chore/opruimen-afhankelijkheden — voor technisch onderhoud

Verouderde branches die al zijn samengevoegd, kun je het beste verwijderen om de repository overzichtelijk te houden. De meeste platforms bieden de optie om branches automatisch te verwijderen na een merge. Lokaal kun je opgeruimde branches verwijderen met git fetch –prune.

Conclusie

Branching is een van de krachtigste mechanismen in moderne softwareontwikkeling en vormt de basis voor georganiseerde samenwerking in teams van elke omvang. Door functies, bugfixes en experimenten in afzonderlijke branches te isoleren, houd je de hoofdlijn stabiel en verklein je de kans op fouten in productie. Een doordachte branch-strategie, gecombineerd met goede pull request-procedures en geautomatiseerde tests, zorgt voor een betrouwbare en voorspelbare leveringscyclus. Kies een strategie die past bij de grootte van jouw team en de frequentie van jouw releases, en maak duidelijke afspraken over naamgeving en samenvoegingsbeleid. Zo haal je het maximale uit branching en leg je een stevige basis voor schaalbare softwareontwikkeling.

Veelgestelde vragen

  1. Wat is het verschil tussen een branch en een fork?
    Een branch is een parallelle ontwikkellijn binnen dezelfde repository. Een fork is een volledige kopie van een repository onder een ander account, vaak gebruikt bij open-source projecten waarbij externe bijdragers geen directe schrijftoegang hebben tot de originele repo. Bijdragen vanuit een fork verlopen via pull requests naar de originele repository.
  2. Hoeveel branches mag een repository hebben?
    Technisch gezien is er geen limiet aan het aantal branches in een Git-repository. In de praktijk groeit het aantal actieve branches mee met het aantal ontwikkelaars en lopende taken. Het is verstandig om branches die zijn samengevoegd direct te verwijderen zodat de repository overzichtelijk blijft en je snel kunt zien welke branches nog actief zijn.
  3. Wanneer gebruik ik rebase in plaats van merge?
    Rebase is handig wanneer je een lineaire, goed leesbare commit-geschiedenis wilt bewaren. Gebruik het om jouw feature branch bij te werken met de laatste wijzigingen van main voordat je een pull request opent. Vermijd rebase op gedeelde branches, omdat het de commit-hashes herschrijft en conflicten kan veroorzaken voor andere teamleden die dezelfde branch gebruiken.
  4. Hoe los ik een merge-conflict op?
    Een merge-conflict ontstaat wanneer twee branches hetzelfde deel van een bestand op een andere manier hebben gewijzigd. Git markeert de conflicterende secties met speciale tekens. Jij opent het bestand, kiest welke versie correct is (of combineert ze handmatig), verwijdert de conflictmarkeringen en maakt vervolgens een nieuwe commit. Veel editors en IDE’s bieden een visuele interface om conflicten eenvoudiger op te lossen.
  5. Wat is een long-lived branch en waarom is dat een risico?
    Een long-lived branch is een branch die gedurende langere tijd — soms weken of maanden — parallel aan de hoofdlijn loopt. Hoe langer een branch bestaat, hoe verder deze afdrijft van de hoofdlijn en hoe groter de kans op complexe merge-conflicten. Moderne best practices raden aan branches zo kort mogelijk te houden en grote functionaliteit op te splitsen in kleine, incrementele wijzigingen die regelmatig worden samengevoegd.

Al onze begrippen

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0-9