Sie verschmelzen. Das ist eigentlich ganz einfach und eine perfekt lokale Operation:
git checkout b1
git merge master
# repeat for b2 and b3
Damit bleibt die Historie genau so, wie sie passiert ist: Sie haben sich vom Master getrennt, Änderungen an allen Zweigen vorgenommen und schließlich die Änderungen vom Master in alle drei Zweige integriert.
git
kann diese Situation sehr gut bewältigen, sie ist für Zusammenführungen konzipiert, die gleichzeitig in alle Richtungen stattfinden. Sie können darauf vertrauen, dass alle Threads korrekt zusammengeführt werden können. Es ist einfach egal, ob Branch b1
Merges master
oder master
Merges b1
, das Merge Commit sieht für Git gleich aus. Der einzige Unterschied besteht darin, welcher Zweig auf dieses Zusammenführungs-Commit verweist.
Sie Rebase. Personen mit einer SVN oder einem ähnlichen Hintergrund finden dies intuitiver. Die Befehle sind analog zum Zusammenführungsfall:
git checkout b1
git rebase master
# repeat for b2 and b3
Menschen mögen diesen Ansatz, weil er in allen Zweigen eine lineare Geschichte beibehält. Diese lineare Geschichte ist jedoch eine Lüge, und Sie sollten sich dessen bewusst sein. Betrachten Sie dieses Commit-Diagramm:
A --- B --- C --- D <-- master
\
\-- E --- F --- G <-- b1
Die Zusammenführung führt zur wahren Geschichte:
A --- B --- C --- D <-- master
\ \
\-- E --- F --- G +-- H <-- b1
Die Rebase gibt Ihnen jedoch diese Geschichte:
A --- B --- C --- D <-- master
\
\-- E' --- F' --- G' <-- b1
Der Punkt ist, dass die Commits E'
, F'
und G'
nie wirklich existiert, und haben wahrscheinlich nie getestet. Sie können nicht einmal kompilieren. Es ist eigentlich recht einfach, unsinnige Commits über eine Rebase zu erstellen, insbesondere wenn die Änderungen in master
für die Entwicklung in wichtig sind b1
.
Die Folge davon kann sein, dass Sie nicht , welche die drei Commits unterscheiden können E
, F
und G
tatsächlich eine Regression eingeführt, um den Wert der abnehmenden git bisect
.
Ich sage nicht, dass Sie nicht verwenden sollten git rebase
. Es hat seine Verwendung. Aber wann immer Sie es benutzen, müssen Sie sich der Tatsache bewusst sein, dass Sie über die Geschichte lügen. Und Sie sollten zumindest die neuen Commits testen.