Sobes.tech
Middle

Aký je rozdiel medzi príkazmi merge a rebase v systéme správy verzií Git?

sobes.tech AI

Odpoveď od AI

merge spája vetvy vytvorením nového commit-u s dvoma rodičmi, zachovávajúc históriu zmien. rebase presúva commit-y jednej vetvy na inú, lineárne usporadúva históriu, ale mení hash-y commit-ov.

  • Pri merge:

    • Vytvorí sa nový commit zlúčenia.
    • História vetiev zostáva jasná.
    • Môžu nastať konflikty, ktoré sa riešia v novom commite.
    # Príklad použitia merge
    git checkout feature-branch
    git merge main
    # Riešenie konfliktov, ak sú
    git commit -m "Zlúčiť main do feature-branch"
    
  • Pri rebase:

    • Commit-y "sa presúvajú" a aplikujú sa na cieľovú vetvu.
    • História sa stáva lineárnou, môže vyzerať "čistejšie".
    • Hash-y presunutých commit-ov sa menia.
    • Môže nastať konflikt pre každý presúvaný commit.
    • Neodporúča sa pre vetvy, ktoré už boli publikované a používajú ich iní vývojári, pretože to mení históriu.
    # Príklad použitia rebase
    git checkout feature-branch
    git rebase main
    # Riešenie konfliktov, ak sú (opakovať pre každý konflikt)
    git add .
    git rebase --continue
    # alebo git rebase --skip na preskočenie commitu
    # alebo git rebase --abort na zrušenie
    
Vlastnosť merge rebase
Zmena histórie Zachováva históriu Mení históriu (prepíše)
Commit-y Vytvára merge commit Presúva existujúce commit-y
Lineárnosť histórie Nie (vetvy sa rozchádzajú) Áno (zjednodušuje históriu)
Prístup Není destruktívny Potenciálne destruktívny
Použiteľnosť Verejné, spoločné vetvy Lokálne, osobné vetvy