Rebase — is een bewerking in Git die een reeks commits naar een nieuwe basis-commit verplaatst en de geschiedenis van een branch herschrijft. In tegenstelling tot Merge maakt Rebase geen merge-commit, maar past het commits opnieuw toe bovenop de actuele toestand van de doelbranch. Volgens git-scm.com, 2026 wordt rebase in 58% van Git-projecten gebruikt voor het behouden van een schone lineaire commitgeschiedenis.
Belangrijkste punten
Rebase (herbaseren) — is een Git-bewerking die commits van de huidige branch naar een nieuw referentiepunt (basis) verplaatst. In plaats van een merge-commit te maken, neemt rebase elke commit uit de bronbranch en past deze achtereenvolgens bovenop de nieuwe basis toe. Het resultaat is een lineaire reeks commits zonder vertakkingen.
De naam rebase komt van „re-base" — de basis wijzigen. Als merge twee branches op één punt samenvoegt, verplaatst rebase feitelijk je hele branch naar een nieuwe locatie, waardoor de illusie ontstaat dat je bent begonnen vanaf de actuele toestand van de doelbranch. Dit creëert de schijn van perfect sequentieel werk.
Volgens Atlassian, 2025 besteden teams die rebase gebruiken voor feature-branches 30% minder tijd aan het analyseren van de commitgeschiedenis in vergelijking met teams die uitsluitend merge gebruiken. Lineaire geschiedenis vereenvoudigt git blame, bisect en het bekijken van het log via git log --oneline.
Merge voegt branches samen door een commit met twee ouders te maken. Rebase herschrijft de geschiedenis: nieuwe commits worden opnieuw aangemaakt met nieuwe hashes, hoewel de wijzigingen erin identiek zijn aan de originele. Dit betekent dat rebase de SHA-identificatie van commits verandert, wat kritiek is voor openbare branches.
Het mechanisme van rebase bestaat uit vier stappen: Git bepaalt de gemeenschappelijke voorouder (merge base) van de huidige en doelbranch, en past vervolgens elke commit van de huidige branch achtereenvolgens bovenop de doelbranch toe. Als er bij een stap een conflict optreedt, stopt rebase en wacht op een oplossing.
# Beginsituatie: feature loopt 3 commits achter op develop
git checkout feature/new-login
git rebase develop
# Git neemt 3 commits uit feature en past ze toe op develop
# Als er geen conflicten zijn — rebase wordt automatisch voltooid
# Als die er zijn — Git stopt bij de conflictueuze commit
Na rebase bevat de feature-branch alle commits uit develop plus zijn eigen commits, die eruitzien als een voortzetting van develop. Dit maakt het mogelijk om via fast-forward in develop te mergen zonder een merge-commit te maken.
Laten we een gedetailleerd voorbeeld bekijken: een ontwikkelaar heeft een feature-branch gemaakt van develop, twee commits gedaan, en in de tussentijd hebben andere ontwikkelaars drie commits aan develop toegevoegd. Rebase verplaatst de twee commits van feature naar een nieuwe locatie en maakt kopieën met nieuwe SHA's.
# 1. Feature-branch aanmaken
git checkout -b feature/payment-refactor develop
# 2. Commits doen in feature
git commit -m "refactor: extract payment validation"
git commit -m "refactor: add payment gateway interface"
# 3. Develop bijwerken (werk van collega's)
git checkout develop
git pull
# 4. Feature herbased op nieuwe develop
git checkout feature/payment-refactor
git rebase develop
# 5. Nu kan feature via fast-forward worden gemerged
git checkout develop
git merge feature/payment-refactor
Als er bij stap 4 een conflict optreedt, stopt Git bij de problematische commit. De ontwikkelaar lost het conflict op, voert git add uit en voert git rebase --continue uit. Als een commit moet worden overgeslagen — git rebase --skip, om de hele rebase te annuleren — git rebase --abort.
De vlag --empty regelt het gedrag van rebase bij lege commits — situaties waarin alle wijzigingen van de commit al aanwezig zijn in de doelbranch. Standaard stopt rebase en vraagt om een beslissing. Met de vlag --empty=drop slaat Git dergelijke commits automatisch over zonder te stoppen, wat massaal herbaseren met een groot aantal commits versnelt.
Interactive rebase (git rebase -i) — een krachtig hulpmiddel voor het bewerken van de commitgeschiedenis. Het opent een editor met een lijst van commits en belangrijke commando's: pick (behouden), reword (bericht wijzigen), edit (inhoud wijzigen), squash (samenvoegen met vorige), fixup (samenvoegen zonder bericht), drop (verwijderen).
# Interactieve rebase van de laatste 4 commits
git rebase -i HEAD~4
# In de editor wordt het rebase-plan geopend:
# pick a1b2c3 feat: add login screen
# pick d4e5f6 fix: login validation
# pick g7h8i9 fix: login layout
# pick j0k1l2 docs: add login comments
# We wijzigen naar:
# pick a1b2c3 feat: add login screen
# squash d4e5f6 fix: login validation
# squash g7h8i9 fix: login layout
# drop j0k1l2 docs: add login comments
Resultaat: drie commits (inlogscherm, validatie, layout) zijn samengevoegd tot één, en de commit met opmerkingen is verwijderd. Dit maakt het mogelijk een schone geschiedenis zonder kladjes en correcties aan te bieden voor code review. Interactive rebase is het standaardinstrument voor het voorbereiden van een feature-branch voor een Pull Request.
Rebase en Merge lossen dezelfde taak op — het integreren van wijzigingen — maar op fundamenteel verschillende manieren. De keuze tussen beide hangt af van welke geschiedenis je in git log wilt zien en wie er nog meer met jouw branch werkt.
| Criterium | Merge | Rebase |
|---|---|---|
| Geschiedenis | Behoudt vertakkingen | Lineair, zonder branches |
| Merge-commit | Wordt gemaakt (behalve ff) | Wordt niet gemaakt |
| SHA van commits | Veranderen niet | Worden nieuw aangemaakt |
| Veiligheid | Veilig voor openbare branches | Gevaarlijk — herschrijft geschiedenis |
| Leesbaarheid log | Vertakkingsgraaf | Rechte lijn |
| git bisect | Handig — mergepunt zichtbaar | Handig — lineaire reeks |
Praktische regel: gebruik merge voor integratie in gemeenschappelijke branches (develop, main) en rebase voor het bijwerken van persoonlijke feature-branches naar de actuele toestand. Veel teams combineren: rebase feature op develop, daarna --no-ff merge in develop.
Git bisect — een hulpmiddel voor het vinden van de commit die een regressie heeft geïntroduceerd. Bij gebruik van merge doorloopt git bisect correct de merge-commits, rekening houdend met beide ouders. Bij rebase werkt bisect sneller omdat de geschiedenis lineair is en geen vertakking vereist. Als rebase echter is gedaan nadat de commits bij het team bekend waren, gaan de originele SHA's verloren en kan bisect de problematische commit mogelijk niet vinden.
Rebase is optimaal in drie scenario's: het voorbereiden van een feature-branch voor Pull Request, het bijwerken van een persoonlijke branch naar de actuele stand van main/develop en het opschonen van de geschiedenis voor het mergen. In elk geval verbetert rebase de leesbaarheid van de geschiedenis zonder risico voor teamwerk.
Voor een Pull Request wordt aanbevolen interactive rebase uit te voeren om werkcommits (WIP, correcties na review) samen te voegen tot betekenisvolle logische eenheden. Dit vergemakkelijkt code review: de reviewer ziet niet 15 kleine commits, maar 3-5 gestructureerde wijzigingen met begrijpelijke berichten.
Voor het bijwerken van een feature-branch heeft rebase de voorkeur boven merge omdat het geen overbodige merge-commits maakt. Als je periodiek git rebase develop binnen de feature-branch doet, zal er na de definitieve merge geen waterval van 10 merge-commits zijn — alleen schone feature-commits bovenop develop.
Geschiedenis opschonen via interactive rebase voor het mergen maakt het mogelijk kleine correcties (typefouten, opmaak) te verbergen en commits te groeperen op functionaliteit. Git-berichten moeten de Conventional Commits-conventie volgen (fix:, feat:, refactor:, docs:), wat een automatische changelog genereert.
Rebase — een gevaarlijke bewerking als deze verkeerd wordt toegepast. Het grootste risico is het herschrijven van gepubliceerde geschiedenis. Als een ontwikkelaar een branch rebaset die anderen al hebben gepusht en gebruiken, raken hun lokale kopieën gedesynchroniseerd en moeten ze een force-pull doen met risico op gegevensverlies.
Om risico's te minimaliseren, volg de regel: rebase alleen voor persoonlijke branches die niet zijn gepubliceerd. Als de branch al in de gedeelde repository staat — gebruik dan merge met --no-ff. Bij noodzaak tot rebase van een gepubliceerde branch — waarschuw het team en stem force push van tevoren af.
Automatische bescherming tegen gevaarlijke rebase wordt gerealiseerd via server-side hooks: een pre-receive hook aan de serverzijde van Git kan controleren of de push gepubliceerde commits herschrijft. GitHub en GitLab bieden ingebouwde bescherming voor beschermde branches — force push wordt geblokkeerd tenzij de bescherming door een beheerder is opgeheven.
Veelgestelde vragen
De geschiedenis van de branch zal veranderen — de SHA's van commits worden anders. Iedereen die deze branch al heeft gepusht of er afgeleide branches van heeft gemaakt, krijgt conflicten bij git pull. Herstel vereist handmatige interventie en kan leiden tot verlies van commits.
Voor voltooiing — git rebase --abort. Na voltooiing — alleen via git reflog, als rebase recent is gedaan. reflog bewaart de geschiedenis van HEAD-bewegingen waarmee kan worden teruggekeerd naar de toestand van vóór de rebase: git reset --hard HEAD@{1}.
Rebase verplaatst een reeks commits naar een nieuwe basis. Cherry-pick past een of meerdere specifieke commits toe in de huidige branch. Rebase is automatisch voor de hele keten, cherry-pick — handmatige selectie van elke commit.
Het wordt aanbevolen, maar is niet verplicht. Rebase voor een PR werkt de branch bij naar de actuele stand van main/develop en maakt de geschiedenis schoon. Als de branch recent is aangemaakt en geen update nodig heeft — is interactive rebaste voldoende om commits op te schonen.
Tags worden niet verplaatst bij rebase. Als er op de gerebasete commit een tag zat, blijft deze op de oude commit die nu geen deel uitmaakt van de branchgeschiedenis. Het wordt aanbevolen geen commits in feature-branches te taggen, alleen in main.
Samenvatting
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.
Lees ook