Sobes.tech
Middle

Wat is het verschil tussen de commando's merge en rebase in het versiebeheersysteem Git?

sobes.tech AI

Antwoord van AI

merge combineert takken door een nieuwe commit te maken met twee ouders, waarbij de geschiedenis van wijzigingen behouden blijft. rebase verplaatst commits van een tak bovenop een andere, waardoor de geschiedenis lineair wordt, maar de hashes van de commits worden gewijzigd.

  • Bij merge:

    • Er wordt een nieuwe merge-commit gemaakt.
    • De geschiedenis van de takken blijft expliciet.
    • Conflicten kunnen voorkomen en worden opgelost in de nieuwe commit.
    # Voorbeeld van gebruik van merge
    git checkout feature-branch
    git merge main
    # Conflicten oplossen, indien aanwezig
    git commit -m "Main samenvoegen in feature-branch"
    
  • Bij rebase:

    • Commits worden "verplaatst" en bovenop de doel-branch toegepast.
    • De geschiedenis wordt lineair, kan er "netter" uitzien.
    • De hashes van de verplaatste commits veranderen.
    • Er kan voor elke verplaatste commit een conflict ontstaan.
    • Niet aanbevolen voor branches die al gepubliceerd zijn en door anderen worden gebruikt, omdat dit de geschiedenis wijzigt.
    # Voorbeeld van gebruik van rebase
    git checkout feature-branch
    git rebase main
    # Conflicten oplossen, indien aanwezig (herhaal voor elke conflicterende commit)
    git add .
    git rebase --continue
    # of git rebase --skip om de commit over te slaan
    # of git rebase --abort om te annuleren
    
Kenmerk merge rebase
Geschiedeniswijziging Behoudt de geschiedenis Wijzigt de geschiedenis (overschrijft)
Commits Maakt een merge-commit Verplaatst bestaande commits
Lineaire geschiedenis Nee (takken divergeren) Ja (vereenvoudigt de geschiedenis)
Benadering Niet-destructief Potentieel destructief
Toepasbaarheid Publieke, gedeelde takken Lokale, persoonlijke takken