Ich habe eine Filiale vor Ort neu gegründet, die bereits gepusht wurde.
Git weist darauf hin, dass mein Zweig und meine Fernbedienung auseinander gegangen sind und dass:
"und haben jeweils 109 und 73 verschiedene Commits"
Wird das Drücken meines Zweigs dieses Problem beheben - dh ist dies nach einer erneuten Basis zu erwarten?
Antworten:
Wenn Sie einen Zweig neu gründen, müssen Sie die Commits für alle Commits neu schreiben, die über den Commits in dem Zweig liegen, auf den Sie neu gründen. Dies liegt daran, dass eine der Eigenschaften eines Commits dessen übergeordnetes Element (oder übergeordnete Elemente) ist. Wenn Sie die Basis neu festlegen, ändern Sie das übergeordnete Element des ältesten lokalen Commits in Ihrem Zweig - und damit die Commit-Hashes aller Ihrer lokalen Commits, da diese Änderung transitiv durch die Commits sprudelt.
Da Sie den Zweig bereits verschoben haben, sollten Sie ihn im Quellzweig zusammenführen, anstatt ihn erneut zu verwenden. Es ist möglich, Ihren neuen Zweig (mithilfe des
-f
Flags) zu "erzwingen" , aber ein normaler Druck funktioniert nicht, da die Integrität des Zweigverlaufs gestört wird. Wenn Sie in diesem Zweig mit anderen zusammenarbeiten, ist Force Pushing eine schlechte Idee, da andere Mitarbeiter dadurch sehr verwirrt werden, wenn ihre Historie plötzlich nicht mehr übereinstimmt.TL; DR - Wenn Sie nicht zusammenarbeiten, verschieben Sie den Zweig mit push -f. Wenn dies der Fall ist, setzen Sie den Zweig auf den vorherigen Status zurück und führen Sie stattdessen den Quellzweig zusammen.
quelle
Alle Ihre Commits haben ihre IDs geändert, sodass die Umleitung nicht wirklich divergiert.
Um Ihr Problem zu lösen , müssen Sie Ihren Remote-Zweig überschreiben:
http://git-scm.com/book/ch3-6.html
Erläuterung:
Sehen Sie, wie in diesem Bild C3 nach der Rebase nicht als C3, sondern als C3 'gesetzt wird. Dies liegt daran, dass es nicht genau C3 ist, aber alle Codeänderungen enthält.
Auf diesem anderen Bild sehen Sie, was eine Rebase ist, wenn eine Fernbedienung beteiligt ist, und warum es eine Umleitung gibt.
In jedem Fall wird Ihnen nach dem erzwungenen Push mitgeteilt, dass ein (Force Update) durchgeführt wurde. An diesem Punkt sollte es Ihnen gut gehen.
Kasse den Link oben und suche nach "git push --force". Sie sehen eine detailliertere Erklärung.
quelle
Ich hatte Erfolg mit der Rebase-Divergenz für einen Push, indem ich Folgendes tat:
Der Zug löste die Divergenz.
VOR dem Ziehen
PULL-Ausgabe
Nach dem Ziehen
NACH DEM DRÜCKEN
Ich gehe davon aus, dass dies wahrscheinlich das ist, was der Kraftschub bewirkt, und ich habe es nicht überprüft.
Vermeiden Sie, wie die anderen gesagt haben, eine Rebase, wenn Sie bereits eine Open-Pull-Anfrage haben. Ich gebe dieses Beispiel als etwas, das für mich funktioniert hat.
quelle
Dies kann ohne erzwungenen Druck behoben werden, indem der Zielzweig in Ihren aktuellen lokalen Zweig umbasiert, zu Ihrem Zielzweig gewechselt und dann Ihr lokaler Zweig in das Ziel umbasiert wird. Dies geht nicht auseinander, da die möglicherweise fehlenden Commits hinzugefügt werden und nicht mehr erstellt werden müssen. Beispiel zur einfacheren Erklärung:
Wenn Sie Ihren Entwicklungszweig NICHT aktualisiert haben, funktioniert eine "Git-Checkout-Entwicklung" && "Git-Rebase-Funktion / Doing_stuff" ordnungsgemäß, da seit dem Checkout keine Commits hinzugefügt wurden. Wenn Sie jedoch die Entwicklung ausgecheckt und das neue Commit heruntergezogen haben, werden Sie diese Abweichung feststellen, wenn Sie versuchen, die Basis neu zu erstellen, da ein neues Commit angezeigt wird. Eine einfache Lösung ohne erzwungenes Drücken (normalerweise keine gute Idee in einer Teamumgebung) ist:
Die Rebase aus Schritt 2 bringt das fehlende Commit in das Feature / Doing_stuff, sodass es in Schritt 4 auf dem neuesten Stand ist und kein neues Commit für die Änderung erstellen muss.
Dies ist eine Lösung, von der ich weiß, dass sie funktioniert, weil ich gerade darauf gestoßen bin und die oben genannten Schritte ausgeführt habe, um die Entwicklung erfolgreich voranzutreiben, ohne sie zu erzwingen. Ich arbeite in einem Team von über 50 Entwicklern, daher ist es verboten, etwas anderes als meine eigenen Testzweige zu erzwingen, sodass ich eine Lösung finden musste.
quelle