Sobes.tech
Middle

Jaký je rozdíl mezi příkazy merge a rebase v systému správy verzí Git?

sobes.tech AI

Odpověď od AI

merge slučuje větve vytvořením nového commitu se dvěma rodiči, zachovávající historii změn. rebase přesouvá commity jedné větve na jinou, lineárně řadí historii, ale mění hash commitů.

  • Při merge:

    • Vytvoří se nový commit sloučení.
    • Historie větví zůstává zřejmá.
    • Mohou nastat konflikty, které se řeší v novém commitu.
    # Příklad použití merge
    git checkout feature-branch
    git merge main
    # Vyřešení konfliktů, pokud jsou
    git commit -m "Sloučení main do feature-branch"
    
  • Při rebase:

    • Commity "se přesunou" a aplikují se na cílovou větev.
    • Historie se stává lineární, může vypadat "čistší".
    • Hashy přesunutých commitů se mění.
    • Může dojít ke konfliktu pro každý přesouvaný commit.
    • Nedoporučuje se pro větve, které již byly publikovány a používají je jiní vývojáři, protože to mění historii.
    # Příklad použití rebase
    git checkout feature-branch
    git rebase main
    # Vyřešení konfliktů, pokud jsou (opakovat pro každý konfliktující commit)
    git add .
    git rebase --continue
    # nebo git rebase --skip pro přeskočení commitu
    # nebo git rebase --abort pro zrušení
    
Vlastnost merge rebase
Změna historie Zachovává historii Mění historii (přepisuje)
Commity Vytváří merge commit Přesouvá existující commity
Lineárnost historie Ne (větve se rozcházejí) Ano (zjednodušuje historii)
Přístup Nedestruktivní Potenciálně destruktivní
Použitelnost Veřejné, sdílené větve Lokální, osobní větve