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.
Porównanie
| Zachowanie | git merge | git rebase |
|---|---|---|
| Kształt historii | Rozgałęziona, z commitem scalającym | Liniowa |
| Przepisuje commity | Nie | Tak |
| Bezpieczny na wspólnych gałęziach | Tak | Nie |
| Zachowuje dokładną historię | Tak | Nie |
| Łatwo ustalić, kiedy coś zostało scalone | Tak | Trudniej |
Składnia
| Polecenie | Co robi |
|---|---|
git merge feature | Scala feature z bieżącą gałęzią |
git merge --no-ff feature | Zawsze tworzy commit scalający |
git rebase main | Odtwarza commity bieżącej gałęzi na main |
git rebase -i HEAD~3 | Interaktywnie edytuje 3 ostatnie commity |
git rebase --abort | Anuluje 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.