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 |