Ich bin neu bei Git und jetzt bin ich in dieser Situation:
- Ich habe vier Zweige (Master, b1, b2 und b3).
- Nachdem ich an b1-b3 gearbeitet hatte, wurde mir klar, dass ich am Zweigmaster etwas ändern muss, das in allen anderen Zweigen vorhanden sein sollte.
- Ich habe geändert, was ich brauchte
master
und ... hier ist mein Problem:
Wie aktualisiere ich alle anderen Zweige mit master
Zweigstellencode?
git
git-branch
Ionuț Staicu
quelle
quelle
Antworten:
Sie haben zwei Möglichkeiten:
Das erste ist eine Zusammenführung, aber dies schafft ein zusätzliches Commit für die Zusammenführung.
Kasse jeder Filiale:
Dann zusammenführen:
Dann drücken Sie:
Alternativ können Sie eine Rebase durchführen:
quelle
got push origin master
... keinen Sinn. Sie wechseln nicht den Hauptzweig. Ich denke, es ist ein Fehler mit 119 Upvote: /git rebase master
ist die richtige AntwortSie haben grundsätzlich zwei Möglichkeiten:
Sie verschmelzen. Das ist eigentlich ganz einfach und eine perfekt lokale Operation:
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 Branchb1
Mergesmaster
odermaster
Mergesb1
, 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:
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:
Die Zusammenführung führt zur wahren Geschichte:
Die Rebase gibt Ihnen jedoch diese Geschichte:
Der Punkt ist, dass die Commits
E'
,F'
undG'
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 inmaster
für die Entwicklung in wichtig sindb1
.Die Folge davon kann sein, dass Sie nicht , welche die drei Commits unterscheiden können
E
,F
undG
tatsächlich eine Regression eingeführt, um den Wert der abnehmendengit 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.quelle
git checkout <source branch>
git pull
. Dann weiter mit oben:git checkout b1
...git merge
mit aufgit rebase
. Daran führt kein Weg vorbei.git rebase
hat den Vorteil, dass Sie mehrere Phasen der Neuausrichtung ausblenden können (dh denselben Zweig nacheinander auf mehrere verschiedene Commits umbasieren, um die Anzahl der Konflikte in jeder Phase zu verringern). Die bloße Tatsache, dass eine Rebase über die Geschichte lügt, macht es jedoch viel einfacher, sich in einer solchen mehrstufigen Rebase gut zu machen ... Deshalb bevorzuge ich immer die Zusammenführung, auch wenn dies bedeutet, dass ich die Geschichte mit mehreren Zusammenführungs-Commits überladen muss .git rebase master
ist der richtige Weg, dies zu tun. Das Zusammenführen würde bedeuten, dass ein Commit für die Zusammenführung erstellt würde, das erneute Basieren jedoch nicht.quelle
Wenn Sie an einem Zweig ein- und ausgeschaltet haben oder in anderen Zweigen viel passiert ist, während Sie an etwas gearbeitet haben, ist es am besten, Ihren Zweig auf Master umzustellen. Dies hält die Geschichte aufgeräumt und macht es viel einfacher, den Dingen zu folgen.
Anmerkungen:
Unter http://git-scm.com/book/ch3-6.html finden Sie ein Kapitel zur Neugründung sowie zahlreiche andere Ressourcen im Internet.
quelle
@cmaster gab die am besten ausgearbeitete Antwort. In Kürze:
Sie sollten den Zweigverlauf nicht neu schreiben, sondern ihn für zukünftige Referenzen im aktuellen Zustand halten. Beim Zusammenführen zum Master wird ein zusätzliches Commit erstellt, das jedoch günstig ist. Commits kosten nicht.
quelle
So aktualisieren Sie andere Zweige wie (Backup) mit Ihrer Hauptzweigkopie. Sie können in beide Richtungen folgen (Rebase oder Merge) ...
Zweige zusammenführen (es wird automatisch ein zusätzliches Commit für den Sicherungszweig durchgeführt).
Hinweis: Rebase ist nichts anderes als das Einrichten einer neuen Basis (eine neue Kopie).
(Wiederholen Sie diesen Vorgang für andere Zweige, z. B. backup2 & etc ..,)
(Wiederholen Sie diesen Vorgang für andere Zweige, z. B. backup2 & etc ..,)
quelle
Sie können zusammenführen oder einzelne Commits über Zweige hinweg anwenden, indem Sie git cherry-pick verwenden .
quelle
Für dieses Problem gibt es zwei Möglichkeiten.
1) Git Rebase
2) Git Merge
Nur diff mit oben beiden im Falle einer Zusammenführung, wird zusätzliche Festschreibung in der Geschichte haben
1) Git Checkout-Zweig (b1, b2, b3)
2) git rebase origin / master (Im Falle von Konflikten, die lokal durch git rebase gelöst werden - weiter)
3) Git Push
Alternativ ist die Option zum Zusammenführen von Git ähnlich
1) git checkout "your_branch" (b1, b2, b3)
2) Git Merge Master
3) Git Push
quelle
So aktualisieren Sie Ihren Zweig vom Master:
quelle