Menu
Coddy logo textTech

Git Rebase vs Merge

Ostatnia aktualizacja

Zarówno git merge, jak i git rebase łączą pracę z jednej gałęzi z drugą. git merge wiąże obie historie commitem scalającym i zachowuje dokładnie to, co się wydarzyło. git rebase odtwarza twoje commity jeden po drugim na wierzchu drugiej gałęzi, dając czystą, liniową historię, ale przy okazji przepisuje twoje commity.

Złota zasada: nigdy nie rób rebase commitów, które inni już pobrali. Wypróbuj oba w terminalu online: prawdziwa powłoka w przeglądarce.

merge zapisuje commit łączący i zachowuje prawdziwy kształt historii; rebase przepisuje twoje commity w prostą linię.

Porównanie

Zachowaniegit mergegit rebase
Kształt historiiRozgałęziona, z commitem scalającymLiniowa
Przepisuje commityNieTak
Bezpieczny na wspólnych gałęziachTakNie
Zachowuje dokładną historięTakNie
Łatwo ustalić, kiedy coś zostało scaloneTakTrudniej

Składnia

PolecenieCo robi
git merge featureScala feature z bieżącą gałęzią
git merge --no-ff featureZawsze tworzy commit scalający
git rebase mainOdtwarza commity bieżącej gałęzi na main
git rebase -i HEAD~3Interaktywnie edytuje 3 ostatnie commity
git rebase --abortAnuluje trwający rebase

Najczęstsze pytania o git rebase vs merge

Jaka jest różnica między git rebase a git merge?
git merge łączy dwie gałęzie, tworząc nowy commit scalający, który spina ich historie i zachowuje dokładny zapis tego, co się wydarzyło. git rebase zamiast tego przenosi twoje commity tak, że są odtwarzane na wierzchu innej gałęzi. Daje to prostą historię, ale przepisuje te commity z nowymi hashami. Merge zachowuje historię; rebase przepisuje ją dla porządku.
Kiedy używać merge, a kiedy rebase?
Używaj merge do integracji skończonej gałęzi (zwłaszcza wspólnej): jest bezpieczny i niczego nie niszczy. Używaj rebase, żeby uporządkować własne lokalne commity przed ich udostępnieniem albo zaktualizować gałąź funkcji do najnowszego main dla czystej historii. Wiele zespołów robi rebase lokalnie, a potem merge do main.
Jaka jest złota zasada rebase?
Nigdy nie rób rebase commitów, na których inni już oparli swoją pracę, czyli zwykle wszystkiego, co jest już wypchnięte na wspólną gałąź. Ponieważ rebase przepisuje commity, zmusza to wszystkich innych do godzenia rozbieżnej historii. Na lokalnych, niewypchniętych commitach rób rebase bez obaw; do wszystkiego, co już publiczne, używaj merge (albo revert).
Co powoduje mniej konfliktów: rebase czy merge?
Żadne z nich nie omija konfliktów, ale ujawniają je inaczej. Merge rozwiązuje wszystkie konflikty raz, w commicie scalającym. Rebase może prosić o rozwiązywanie konfliktów commit po commicie, w miarę odtwarzania każdego z nich. Łączna praca jest podobna; rebase po prostu ją rozkłada.
Czy mogę to przećwiczyć online?
Tak. Otwórz terminal online i uruchom git merge oraz git rebase w prawdziwej powłoce w przeglądarce, bez żadnej instalacji. Darmowy interaktywny kurs Git w Coddy też krok po kroku omawia scalanie i rebase.
Ilustracja języków programowania w Coddy

Ucz się Gita z Coddy

ZACZNIJ