Sie verschmelzen. Das ist eigentlich ganz einfach, und ein vollkommen lokaler Vorgang:
git checkout b1
git merge master
# repeat for b2 and b3
Damit bleibt die Geschichte genau so, wie sie war: Sie haben sich von master gegabelt, Sie haben Änderungen an allen Zweigen vorgenommen und schließlich die Änderungen von master in alle drei Zweige integriert.
git
kann mit dieser Situation sehr gut umgehen, da es für Zusammenführungen in alle Richtungen gleichzeitig ausgelegt ist. Sie können sich darauf verlassen, dass es alle Fäden korrekt zusammenführt. Es kümmert sich einfach nicht darum, ob ein Zweig b1
verschmilzt master
o master
verschmilzt b1
sieht der Merge-Commit für Git ganz gleich aus. Der einzige Unterschied besteht darin, welcher Zweig am Ende auf diesen Merge Commit verweist.
Sie rebasen. Leute mit einem SVN- oder ähnlichen Hintergrund finden dies intuitiver. Die Befehle sind analog zum Merge-Fall:
git checkout b1
git rebase master
# repeat for b2 and b3
Dieser Ansatz ist beliebt, weil er eine lineare Geschichte in allen Zweigen beibehält. Diese lineare Historie ist jedoch eine Lüge, und Sie sollten sich dessen bewusst sein, dass sie es ist. Betrachten Sie diesen Commit-Graphen:
A --- B --- C --- D <-- master
\
\-- E --- F --- G <-- b1
Die Verschmelzung ergibt die wahre Geschichte:
A --- B --- C --- D <-- master
\ \
\-- E --- F --- G +-- H <-- b1
Mit der Rebase erhalten Sie jedoch diese Geschichte:
A --- B --- C --- D <-- master
\
\-- E' --- F' --- G' <-- b1
Der Punkt ist, dass die Übertragungen E'
, F'
y G'
nie wirklich existiert haben und wahrscheinlich auch nie getestet wurden. Möglicherweise lassen sie sich nicht einmal kompilieren. Es ist eigentlich ziemlich einfach, unsinnige Commits über eine Rebase zu erstellen, besonders wenn die Änderungen in master
sind wichtig für die Entwicklung in b1
.
Dies kann zur Folge haben, dass Sie nicht unterscheiden können, welche der drei Übertragungen E
, F
y G
tatsächlich eine Regression eingeführt, die den Wert von git bisect
.
Ich will damit nicht sagen, dass Sie nicht git rebase
. Es hat seinen Nutzen. Aber wann immer Sie es verwenden, müssen Sie sich der Tatsache bewusst sein, dass Sie über die Geschichte lügen. Und Sie sollten die neuen Übertragungen zumindest kompilieren und testen.
5 Stimmen
Ich habe meine Antwort hier gefunden: Wie führt man selektive Dateien mit git-merge zusammen?
168 Stimmen
Eine weitere einfache Aufgabe, die durch Git erschwert wird. Die Git-Entwickler sollten Stack Overflow als Feedback in ihrem SDLC-Kreislauf nutzen. 300.000 Leute sollten darauf hinweisen, dass mit dem Arbeitsablauf von Git etwas nicht stimmt. Sie müssen einen UX-Experten einstellen, denn sie können Git offensichtlich nicht selbst richtig machen.
3 Stimmen
@jww was ist sdlc loop?system development life cycle?