Ta odpowiedź została poprawiona, ponieważ moje rozumienie, diagramy i wnioski były niepoprawne.
git pull
powoduje, że merge zatwierdza się, ponieważ git jest scalany. Można to zmienić, ustawiając swoje gałęzie tak, aby używały rebase zamiast scalania. Użycie rebase zamiast scalania podczas ściągania zapewnia bardziej liniową historię do współdzielonego repozytorium. Z drugiej strony, zmiany typu merge pokazują równoległe prace rozwojowe w gałęzi.
Na przykład dwie osoby pracują w tej samej branży. Oddział zaczyna się jako:
...->C1
Pierwsza osoba kończy pracę i przepycha się do gałęzi:
...->C1->C2
Druga osoba kończy pracę i chce naciskać, ale nie może, ponieważ musi zaktualizować. Lokalne repozytorium dla drugiej osoby wygląda następująco:
...->C1->C3
Jeśli pull jest ustawiony na scalanie, repozytorium drugiej osoby będzie wyglądać jak.
...->C1->C3->M1
\ /
->C2->
Gdzie M1 jest zatwierdzeniem scalającym. Ta nowa historia gałęzi zostanie przeniesiona do repozytorium. Jeśli zamiast tego pull jest ustawiony na ponowne bazowanie, lokalne repozytorium wyglądałoby następująco:
...->C1->C2->C3
Nie ma zatwierdzenia łączenia. Historia stała się bardziej linearna.
Oba wybory odzwierciedlają historię branży. git pozwala wybrać preferowaną historię.
Rzeczywiście istnieją miejsca, w których rebase może powodować problemy ze zdalnymi oddziałami. To nie jest jeden z tych przypadków. Wolimy używać rebase, ponieważ upraszcza to już skomplikowaną historię gałęzi, a także pokazuje wersję historii w odniesieniu do współdzielonego repozytorium.
Możesz ustawić branch.autosetuprebase = always tak, aby git automatycznie ustalał twoje zdalne gałęzie jako rebase zamiast master.
git config --global branch.autosetuprebase always
To ustawienie powoduje, że git automatycznie tworzy ustawienie konfiguracyjne dla każdej zdalnej gałęzi:
branch.<branchname>.rebase=true
Możesz ustawić to samodzielnie dla swoich zdalnych oddziałów, które są już skonfigurowane.
git config branch.<branchname>.rebase true
Chciałbym podziękować @LaurensHolst za przesłuchanie i kontynuację moich poprzednich wypowiedzi. Z pewnością dowiedziałem się więcej o tym, jak działa git z zatwierdzeniami pull i merge.
Więcej informacji na temat zatwierdzeń scalających można znaleźć w artykule Współtworzenie projektu w ProGit-Book . Sekcja Private Small Team pokazuje zatwierdzenia scalenia.
git log --no-merges