Rebasen: wat is het, hoe werkt rebase en werken met Git

Auteur: IT Sectr Gepubliceerd: 2026-08-01 Leestijd: 9 min

Rebase — is een operatie in Git die commits van de ene branch naar de top van de andere verplaatst, waardoor een lineaire geschiedenis ontstaat zonder overbodige merge-commits. In tegenstelling tot samenvoegen, herschrijft rebase de geschiedenis: elke verplaatste commit krijgt een nieuwe hash, omdat de ouder verandert. Volgens Git-documentatie (2026) wordt rebase gebruikt om feature-branches te synchroniseren met de huidige stand van main voordat een pull request wordt aangemaakt. Het git rebase-commando is een van de belangrijkste tools voor het behouden van een schone geschiedenis in projecten die Git Flow gebruiken.

Belangrijkste punten

  • Rebase — het verplaatsen van commits van een feature-branch naar de top van de doelbranch met nieuwe hashes.
  • Lineaire geschiedenis — het belangrijkste voordeel van rebase: geen merge-commits maakt het lezen van de changelog eenvoudiger.
  • Interactieve rebase met de -i vlag maakt het mogelijk commits te combineren, hernoemen en verwijderen vóór publicatie.
  • Openbare branches — rebase is verboden voor branches waar andere ontwikkelaars mee werken, omdat het de geschiedenis herschrijft.
  • Mogelijke conflicten — bij het verplaatsen van commits kan Git voor elke commit afzonderlijk om het oplossen van conflicten vragen.

Wat is rebase in Git

Rebase — is een Git-commando dat de huidige branch herbaset op de opgegeven branch: het neemt alle commits van de huidige branch, slaat ze tijdelijk op, verplaatst de branch-pointer naar de doelcommit en past de opgeslagen commits sequentieel erboven toe. Het resultaat — de geschiedenis ziet eruit alsof de ontwikkelaar direct vanaf de laatste commit van de doelbranch heeft gewerkt.

Basis syntaxis: git rebase main — terwijl je in de feature-branch bent, verplaatst dit commando alle feature-commits naar de top van main. Git gebruikt een three-way merge-strategie voor elke commit afzonderlijk. Als commit A al aanwezig is in de doelbranch (bepaald via hash), slaat Git deze automatisch over, wat duplicatie van wijzigingen voorkomt.

Rebase ondersteunt ook de onto-modus voor het verplaatsen van een deel van de commits: git rebase --onto target start end — deze vorm maakt het mogelijk een reeks commits uit een branch te halen en deze bovenop een andere toe te passen. Bijvoorbeeld git rebase --onto main feature~3 feature verplaatst de laatste drie commits van de feature-branch naar de top van main.

bash
# Schakel naar feature-branch
git checkout feature

# Herbaseer feature op main
git rebase main

# Na succesvolle rebase — geschiedenis is lineair
git log --oneline --graph

# Verplaats laatste 3 commits naar main
git rebase --onto main HEAD~3 HEAD

Rebase vs Merge: belangrijkste verschillen

Rebase en merge lossen dezelfde taak op — het combineren van wijzigingen uit verschillende branches — maar doen dit op fundamenteel verschillende manieren. Merge behoudt de volledige samenvoeggeschiedenis door een merge-commit met twee ouders te maken. Rebase herschrijft de geschiedenis en maakt deze lineair. De keuze hangt af van de workflow van het team en de regels voor het werken met de repository.

Het belangrijkste verschil — hoe het feit van samenvoegen wordt vastgelegd. Merge bewaart: „op dit punt hebben we feature in main samengevoegd” — dit is informatief voor de projectgeschiedenis, maar vervuilt de log bij frequente samenvoegingen. Rebase toont: „feature-commits zijn sequentieel gemaakt vanaf de laatste staat van main” — dit is schoon, maar verbergt het feit dat het werk parallel werd uitgevoerd.

Het tweede verschil — afhandeling van conflicten. Bij merge worden conflicten eenmalig opgelost en de oplossing wordt vastgelegd in de merge-commit. Bij rebase kunnen conflicten ontstaan voor elke verplaatste commit en elke vereist een afzonderlijke oplossing. Dit is arbeidsintensiever, maar geeft meer controle over welke wijzigingen in de uiteindelijke versie terechtkomen.

CriteriumRebaseMerge
GeschiedenisLineair, zonder merge-commitsNiet-lineair, met merge-commits
Commit hashesWorden herschreven (nieuw)Originele blijven behouden
ConflictenVoor elke commit afzonderlijkÉén keer in merge-commit
Openbare branchesVerbodenToegestaan
Annuleringscommandogit rebase --abortgit merge --abort

Interactieve rebase: commando’s en vlaggen

Interactieve rebase (git rebase -i) — is een modus waarin Git een editor opent met een lijst van commits en beschikbare acties voor elk ervan. De ontwikkelaar kan de geschiedenis herschrijven voordat deze naar de externe repository wordt gestuurd. Dit is het belangrijkste hulpmiddel voor het schoonhouden van commits in een feature-branch.

Beschikbare commando’s in de interactieve modus: pick (laat de commit zoals hij is), reword (wijzig het commit-bericht), edit (stop voor wijzigingen), squash (voeg samen met de vorige commit, behoud beide berichten), fixup (voeg samen, verwijder het bericht), drop (verwijder de commit). Elk commando wordt voor de commit-hash in de geopende editor geplaatst.

Squash en fixup — de meest gebruikte commando’s voor het combineren van commits. Als een ontwikkelaar 5 kleine commits met correcties heeft gemaakt tijdens het werk, zal squash ze combineren in één logische commit met een betekenisvol bericht. Fixup is handig voor het corrigeren van typefouten: wijzigingen worden aan de vorige commit toegevoegd zonder hun eigen bericht te bewaren.

bash
# Open editor voor laatste 4 commits
git rebase -i HEAD~4

# Editor zal tonen:
pick a1b2c3d Add authentication
pick e4f5g6h Fix typo in login
squash i6j7k8l Additional login fixes
pick m9n0o1p Add auth tests

# Na opslaan — Git voert rebase uit
# en opent editor voor samengevoegd commit-bericht

# Auto-squash zonder editor te openen
git rebase -i HEAD~4 --autosquash

De vlag --autosquash stelt automatisch fixup/squash in voor commits waarvan de berichten beginnen met fixup! of squash!. Dit versnelt het werk als de ontwikkelaar commits van tevoren markeert voor latere samenvoeging. De vlag --committer-date-is-author-date behoudt de originele datum van de commit bij rebasen — handig voor het behouden van chronologie in de geschiedenis.

Conflicten oplossen bij rebase

Conflicten bij rebase ontstaan wanneer Git de verplaatste commit niet automatisch kan toepassen vanwege tegenstrijdigheden met wijzigingen in de doelbranch. In tegenstelling tot merge, waar het conflict eenmalig wordt opgelost, kan bij rebase elke commit een conflict veroorzaken en moet dit sequentieel worden opgelost voor elke commit van de oudste naar de nieuwste.

Wanneer een conflict optreedt, onderbreekt Git de rebase en meldt welke commit het probleem heeft veroorzaakt. De ontwikkelaar opent het conflicterende bestand (Git markeert conflictgebieden met markeringen <<<<<<<, =======, >>>>>>>), bewerkt het, voegt het toe aan de index (git add) en zet de rebase voort met het commando git rebase --continue. Als er geen oplossing wordt gevonden — git rebase --abort annuleert de rebase volledig.

Tip: bij meerdere conflicten is het efficiënter om git mergetool te gebruiken, dat een visuele editor opent voor het oplossen van tegenstrijdigheden. Je kunt ook de problematische commit overslaan (git rebase --skip), maar dit verwijdert de wijzigingen uit de uiteindelijke geschiedenis, wat zelden de juiste oplossing is.

bash
# Start rebase met conflict
git rebase main
# Auto-merging file.txt
# CONFLICT (inhoud): Samenvoegconflict in file.txt

# Controleer status
git status
# beide gewijzigd: file.txt

# Bewerk conflicterende secties → git add → ga verder
git add file.txt
git rebase --continue

# Bij twijfel — annuleer
git rebase --abort

Wanneer mag je geen rebase doen

Gouden regel van rebase: herbaset nooit commits die al naar de externe repository zijn gestuurd en beschikbaar zijn voor andere ontwikkelaars. Omdat rebase de hashes van commits herschrijft, zullen collega’s conflicten ondervinden bij synchronisatiepogingen — hun lokale geschiedenis zal niet overeenkomen met de herschreven externe geschiedenis.

De situatie waarin rebase categorisch verboden is: als iemand al een branch heeft gemaakt op basis van jouw commits (bijvoorbeeld je collega heeft een feature gemaakt van jouw feature), zal het wijzigen van de geschiedenis zijn werk verpesten. In dergelijke gevallen moet merge worden gebruikt. Ook wordt afgeraden om rebase vlak voor een deadline te doen — een fout bij het oplossen van conflicten kan langer duren dan verwacht en de release blokkeren.

Uitzondering: als de branch slechts door één ontwikkelaar wordt gebruikt (persoonlijke feature-branch, niet gepubliceerd of gepubliceerd in draft-modus), is rebase vóór push standaard praktijk. Na publicatie en het begin van teamwerk — alleen merge. GitHub en GitLab bieden standaard squash merge als compromis: het combineert commits in één, maar herschrijft de geschiedenis van de doelbranch niet.

  • Openbare branches (main, develop, release) — rebase volledig verboden.
  • Andermans commits — als de branch commits van een andere ontwikkelaar bevat, is rebase ontoelaatbaar.
  • Voor een release — het risico op conflicten is hoger: merge is veiliger een dag voor de deadline.
  • Branches met tags — het verplaatsen van een commit met een tag schendt de conventies van semantisch versiebeheer.
  • CI/CD gekoppeld aan hashes — sommige deploy-systemen identificeren builds aan de hand van de commit-hash; rebase verbreekt de tracking.

Praktische workflow met rebase

In moderne teams wordt meestal de rebase-gerichte workflow gebruikt in combinatie met GitHub Flow. Het proces ziet er als volgt uit: de ontwikkelaar maakt een feature-branch vanaf main, werkt erin, synchroniseert periodiek via git rebase main en voert vóór het aanmaken van een pull request een interactieve rebase uit om de geschiedenis op te schonen.

Na het aanmaken van een PR (als er nieuwe wijzigingen uit main moeten worden gehaald) wordt git pull --rebase main gebruikt in plaats van de gewone git pull. Dit maakt het mogelijk wijzigingen binnen te halen zonder een overbodige merge-commit te maken. Git pull met de --rebase vlag is gelijk aan git fetch + git rebase — Git laadt eerst nieuwe commits, dan herbaset het lokale wijzigingen erbovenop.

Git biedt de mogelijkheid om rebase in te stellen als standaardgedrag voor pull: git config --global pull.rebase true. Na deze configuratie voert git pull altijd rebase uit in plaats van merge. Als een gewone pull nodig is — wordt git pull --no-rebase gebruikt. Veel teams schakelen ook autostash in: git config --global rebase.autoStash true — dit verbergt automatisch niet-gecommitte wijzigingen vóór rebase en herstelt ze daarna.

Veelgestelde vragen

Wat betekent rebasen van commits in Git?

Rebasen — betekent het uitvoeren van git rebase: het verplaatsen van commits van de huidige branch naar de top van een andere. Het resultaat is dat de geschiedenis lineair wordt, elke commit een nieuwe hash krijgt en merge-commits niet worden aangemaakt. Het commando wordt gebruikt voor het synchroniseren van branches zonder onnodige samenvoegpunten in de log.

Waarin verschilt rebase van merge?

Merge maakt een merge-commit met twee ouders, behoudt parallelle geschiedenis en originele hashes. Rebase herschrijft de geschiedenis — commits krijgen nieuwe hashes en de geschiedenis wordt lineair. Merge is veiliger voor openbare branches, rebase geeft een schonere log.

Hoe doe je een interactieve rebase?

Het commando git rebase -i HEAD~N opent een editor met de laatste N commits. Voor elke commit kun je een actie kiezen: pick (laten), reword (hernoemen), edit (wijzigen), squash (samenvoegen met vorige), fixup (samenvoegen zonder bericht), drop (verwijderen). Na opslaan past Git de geselecteerde wijzigingen toe.

Waarom is rebase gevaarlijk voor openbare branches?

Rebase herschrijft commit-hashes, waardoor de geschiedenis incompatibel wordt met kopieën van dezelfde commits bij andere ontwikkelaars. Als een collega je commits al via git pull heeft ontvangen en jij ze later hebt gerebased, wordt zijn git push geweigerd en zal git pull dubbele commits en conflicten creëren.

Kan rebase worden teruggedraaid na uitvoering?

Vóór voltooiing — git rebase --abort annuleert volledig. Na voltooiing kan de vorige staat worden hersteld via git reflog — zoek de hash van de commit vóór rebase en voer git reset --hard uit naar die hash. Reflog bewaart de geschiedenis van HEAD-bewegingen standaard 30 dagen.

Samenvatting

  • Rebase — het verplaatsen van commits naar een nieuwe basis, creëert een lineaire geschiedenis zonder merge-commits.
  • Commando git rebase main herbaset de huidige branch op main, past commits sequentieel erboven toe.
  • Interactieve modus -i maakt het mogelijk commits te combineren (squash), hernoemen (reword) en verwijderen (drop).
  • Conflicten bij rebase worden voor elke commit afzonderlijk opgelost, in tegenstelling tot merge.
  • Openbare branches — rebasen is verboden omdat het de geschiedenis voor andere ontwikkelaars verstoort.
  • git pull --rebase — veilige manier van synchroniseren met een externe branch zonder merge-commit.
  • Git reflog — maakt herstel na een mislukte rebase mogelijk binnen 30 dagen.

We ontwikkelen een mobiele applicatie turnkey

IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.

Bespreek het project

Lees ook