Diese Antwort wurde überarbeitet, da mein Verständnis, meine Diagramme und Schlussfolgerungen falsch waren.
git pull
Verursacht Zusammenführungs-Commits, da Git zusammengeführt wird. Dies kann geändert werden, indem Sie Ihre Zweige so einstellen, dass Rebase anstelle von Merge verwendet wird. Die Verwendung von Rebase anstelle von Merge bei einem Pull bietet einen lineareren Verlauf für das gemeinsam genutzte Repository. Auf der anderen Seite zeigen Merge Commits die parallelen Entwicklungsbemühungen in der Branche.
Beispielsweise arbeiten zwei Personen in derselben Branche. Der Zweig beginnt als:
...->C1
Die erste Person beendet ihre Arbeit und drängt in die Filiale:
...->C1->C2
Die zweite Person beendet ihre Arbeit und möchte pushen, kann dies aber nicht, da sie aktualisiert werden muss. Das lokale Repository für die zweite Person sieht folgendermaßen aus:
...->C1->C3
Wenn der Pull auf Zusammenführen eingestellt ist, sieht das Repository für zweite Personen so aus.
...->C1->C3->M1
\ /
->C2->
Wobei M1 ein Merge-Commit ist. Diese neue Filialhistorie wird in das Repo verschoben. Wenn stattdessen der Pull so eingestellt ist, dass das lokale Repo neu gestartet wird, sieht dies folgendermaßen aus:
...->C1->C2->C3
Es gibt kein Zusammenführungs-Commit. Die Geschichte wurde linearer gestaltet.
Beide Auswahlmöglichkeiten spiegeln die Geschichte der Branche wider. Mit git können Sie auswählen, welchen Verlauf Sie bevorzugen.
Es gibt in der Tat Orte, an denen eine erneute Basis ein Problem mit Remote-Zweigen verursachen kann. Dies ist nicht einer dieser Fälle. Wir bevorzugen die Verwendung von rebase, da dies einen bereits komplizierten Zweigverlauf vereinfacht und eine Version des Verlaufs relativ zum gemeinsam genutzten Repository anzeigt.
Sie können branch.autosetuprebase = festlegen, damit git Ihre Remote-Zweige immer automatisch als Rebase anstelle von Master einrichtet.
git config --global branch.autosetuprebase always
Diese Einstellung bewirkt, dass git automatisch eine Konfigurationseinstellung für jeden Remote-Zweig erstellt:
branch.<branchname>.rebase=true
Sie können dies selbst für Ihre Remote-Zweige festlegen, die bereits eingerichtet sind.
git config branch.<branchname>.rebase true
Ich möchte @LaurensHolst dafür danken, dass er meine vorherigen Aussagen hinterfragt und weiterverfolgt hat. Ich habe sicherlich mehr darüber gelernt, wie Git mit Pull- und Merge-Commits funktioniert.
Weitere Informationen zu Zusammenführungs-Commits finden Sie unter Beitrag zu einem Projekt in ProGit-Book . Im Abschnitt " Privates kleines Team " werden Zusammenführungs-Commits angezeigt.
git log --no-merges