Rozważ następującą sytuację:
- Masz klon repozytorium git
- Masz kilka lokalnych zatwierdzeń (które nie zostały jeszcze nigdzie wypchnięte)
- W zdalnym repozytorium znajdują się nowe zatwierdzenia, których jeszcze nie uzgodniono
Więc coś takiego:
Jeśli wykonasz git pull
ustawienia domyślne, otrzymasz coś takiego:
Jest tak, ponieważ git wykonał scalenie.
Istnieje jednak alternatywa. Możesz zamiast tego powiedzieć pullowi, aby zrobił rebase:
git pull --rebase
a dostaniesz to:
Moim zdaniem, wersja rebased ma wiele zalet, które głównie skupiają się na utrzymaniu czystości zarówno twojego kodu, jak i historii, więc jestem nieco zaskoczony faktem, że git domyślnie łączy się. Tak, skróty twoich lokalnych zobowiązań zostaną zmienione, ale wydaje się, że to niewielka cena za prostszą historię, którą dostajesz w zamian.
W żadnym wypadku jednak nie sugeruję, że jest to jakaś zła lub niewłaściwa domyślna wartość. Mam problem z ustaleniem powodów, dla których scalenie może być preferowane jako domyślne. Czy mamy jakiś wgląd w to, dlaczego został wybrany? Czy istnieją korzyści, które sprawiają, że jest bardziej odpowiedni jako domyślny?
Główną motywacją tego pytania jest to, że moja firma próbuje ustalić pewne podstawowe standardy (mam nadzieję, że bardziej podobne wytyczne) dotyczące tego, jak organizujemy nasze repozytoria i zarządzamy nimi, aby ułatwić programistom dostęp do repozytorium, z którym wcześniej nie pracowali. Interesuje mnie uzasadnienie, że zwykle powinniśmy dokonywać zmian w bazie w tego typu sytuacjach (i prawdopodobnie za zalecenie programistom domyślnego ustawienia globalnej konfiguracji na bazę), ale gdybym się temu sprzeciwił, z pewnością zapytałbym, dlaczego zmiana bazy nie jest Domyślne, jeśli jest tak świetne. Zastanawiam się więc, czy czegoś mi brakuje.
Zasugerowano, że to pytanie jest duplikatem Dlaczego tak wiele stron internetowych woli „git rebase” niż „git merge”? ; pytanie to jest jednak odwrotnością tego pytania . Omówiono zalety ponownego łączenia w stosunku do scalania, podczas gdy to pytanie dotyczy korzyści płynących z scalania w stosunku do łączenia. Odpowiedzi tam odzwierciedlają to, koncentrując się na problemach ze scalaniem i korzyściach z rebase.