Ich möchte eine andere Perspektive geben, was "git pull --rebase" eigentlich bedeutet, weil es manchmal verloren zu gehen scheint.
Wenn Sie jemals Subversion (oder CVS) verwendet haben, sind Sie möglicherweise an das Verhalten von "svn update" gewöhnt. Wenn Sie Änderungen festschreiben müssen und die Festschreibung fehlschlägt, weil Änderungen vorgelagert wurden, "svn update". Bei der Subversion werden vorgelagerte Änderungen mit Ihren Änderungen zusammengeführt, was möglicherweise zu Konflikten führt.
Was Subversion gerade getan hat, war im Wesentlichen "pull - rebase". Das Umformulieren Ihrer lokalen Änderungen in Bezug auf die neuere Version ist der "Neuausrichtung" -Teil davon. Wenn Sie vor dem fehlgeschlagenen Festschreibungsversuch "svn diff" ausgeführt und anschließend das resultierende Diff mit der Ausgabe von "svn diff" verglichen haben, ist der Unterschied zwischen den beiden Diffs der Vorgang, den die Neubasierungsoperation ausgeführt hat.
Der Hauptunterschied zwischen Git und Subversion besteht in diesem Fall darin, dass in Subversion "Ihre" Änderungen nur als nicht festgeschriebene Änderungen in Ihrer Arbeitskopie vorhanden sind, während Sie in Git tatsächlich lokale Commits haben. Mit anderen Worten, in Git haben Sie die Geschichte gegabelt; Ihre Geschichte und die vorgelagerte Geschichte sind auseinander gegangen, aber Sie haben einen gemeinsamen Vorfahren.
Meiner Meinung nach ist im Normalfall einfach Ihre lokale Niederlassung mit reflektierenden das Upstream - Zweig und es kontinuierliche Entwicklung zu tun, das Richtige zu tun ist immer „--rebase“, denn das ist , was Sie eigentlich semantisch tun . Sie und andere hacken die beabsichtigte lineare Geschichte eines Zweigs ab. Die Tatsache, dass jemand anderes vor Ihrem versuchten Push etwas Druck gemacht hat, ist irrelevant, und es scheint kontraproduktiv zu sein, wenn jeder solche Unfall des Timings zu Zusammenführungen in der Geschichte führt.
Wenn Sie tatsächlich das Bedürfnis haben, aus irgendeinem Grund eine Branche zu sein, ist dies meiner Meinung nach ein anderes Anliegen. Aber wenn Sie nicht den spezifischen und aktiven Wunsch haben, Ihre Änderungen in Form einer Zusammenführung darzustellen, sollte das Standardverhalten meiner Meinung nach "git pull --rebase" sein.
Bitte berücksichtigen Sie andere Personen, die die Geschichte Ihres Projekts beobachten und verstehen müssen. Möchten Sie, dass die Geschichte überall mit Hunderten von Zusammenführungen übersät ist, oder möchten Sie nur die wenigen ausgewählten Zusammenführungen, die echte Zusammenführungen von absichtlich unterschiedlichen Entwicklungsbemühungen darstellen?