Ich habe einen Zweig, den ich vom Hauptzweig gezogen habe. Nennen wir es Integration.
Im Integrationszweig habe ich verschiedene Commits (C1, C2, C3) gemacht. Wenn ich fertig bin, habe ich eine Pull-Anfrage an den Master-Zweig gestellt. Vom Master-Zweig aus habe ich ein „Squash and Merge“ durchgeführt, sodass es nur zu einem einzigen Commit im Master führt. Das scheint alles großartig zu sein.
Aber später habe ich einige zusätzliche Änderungen am Integrationszweig vorgenommen, und wenn ich erneut eine Pull-Anfrage mache, sehe ich alle Commit-Kommentare früherer Änderungen (C1, C2, C3, C4), die ich bereits festgeschrieben habe. Dieses Problem tritt nicht auf, wenn ich in meinem früheren Commit die Standardeinstellung „Create an Merge Commit“ verwende. Was habe ich falsch gemacht?
Visuell ist es einfacher zu verstehen. Hier ist Ihr Repo. master
ist am Commit B
und dein feature
branch ist am Commit C3
.
A - B [master]
\
C1 - C2 - C3 [feature]
Eine normale Zusammenführung tut dies. Ein neuer Merge-Commit, BC123
wird hinzugefügt, indem der Inhalt kombiniert wird master
mit denen drin feature
. Die Geschichten sind miteinander verknüpft. Beachten Sie, dass feature
bewegt sich nicht, es ist immer noch an C3
.
A - B ------------- BC123 [master]
\ /
C1 - C2 - C3 [feature]
Ein Squash and Merge tut dies.
A - B ------------- BC123 [master]
\
C1 - C2 - C3 [feature]
BC123
enthält den gleichen zusammengeführten Inhalt wie zuvor, aber es besteht keine Verbindung zum feature
Zweig. Und wieder, feature
ändert sich nicht. feature
wird nicht gequetscht, es bleibt haften. Stattdessen BC123
enthält die gestauchten Änderungen aus feature
.
Wenn Sie mehr gearbeitet haben feature
begeht C4
und C5
hier ist das passiert.
A - B ------------- BC123 [master]
\
C1 - C2 - C3 - C4 - C5 [feature]
Und wenn Sie eine Pull-Anfrage stellen, werden alle Änderungen übernommen feature
nicht in master
wird auftauchen. Was Git betrifft, ist das so C1
zu C5
. Wenn Sie erneut Squash & Merge durchführen würden, würde ein neuer Commit erfolgen master
aber nur mit dem Inhalt von C4 und C5, da Git ziemlich gut darin ist, doppelte Inhalte zwischen Zweigen herauszufinden.
A - B ------------- BC123 - C45 [master]
\
C1 - C2 - C3 - C4 - C5 [feature]
Während du kann Arbeit auf diese Weise, es ist verwirrend.
Um es kurz zu machen: Sobald Sie einen Zweig zusammengeführt haben, arbeiten Sie nicht mehr daran. Lösche es. Wenn Sie mehr Arbeit erledigen müssen, öffnen Sie einen neuen Zweig.
Dieses Problem tritt nicht auf, wenn ich in meinem früheren Commit die Standardeinstellung „Create an Merge Commit“ verwende.
Zurück zur fusionierten Version…
A - B ------------- BC123 [master]
\ /
C1 - C2 - C3 [feature]
Wenn Sie mehr arbeiten feature
…
A - B ------------- BC123 [master]
\ /
C1 - C2 - C3 - C4 - C5 [feature]
Und dann machen Sie eine Pull-Anfrage, Git zeigt Ihnen die Commits darin feature
die nicht drin sind master
. Aufgrund der Fusion master
enthält C1
, C2
und C3
. Die PR zeigt dir also nur C4
und C5
. Das ist immer noch verwirrend, und es gilt derselbe Rat: Sobald Sie einen Zweig zusammengeführt haben, löschen Sie ihn. Öffnen Sie ein weiteres, wenn Sie mehr Arbeit erledigen müssen.
Während Squash & Merge einfacher ist, bietet das Mergen (richtig gemacht) einen gesünderen Verlauf und mehr Informationen, mit denen Git arbeiten kann. Sie werden mehr aus Git herausholen, wenn Sie verstehen, wie das Verzweigen und Zusammenführen funktioniert.
Wenn ich deine Situation richtig verstehe…
Die Hauptsache, die Sie falsch machen, besteht darin, einen Zweig weiter zu verwenden, nachdem er zusammengeführt wurde. Löschen Sie nach dem Zusammenführen den Zweig. Zusätzliche Arbeit sollte an einem neuen Zweig erfolgen.
Das erste „Squash and Merge“ betrifft den Integrationszweig nicht; wie die integrierten Commits im Master-Zweig erscheinen. Es ist also sinnvoll, dass A, B und C immer noch vorhanden sind, da Sie den alten Zweig wiederverwenden.
Viel Glück.
Ich denke diese Antwort könnte dir helfen. Aber statt Zweige müssen Sie den gemeinsamen Vorfahren selbst finden. stackoverflow.com/a/70994400/1759443
– Kyle Venn
5. Februar um 0:45 Uhr