Wie können Sie die Änderungen des aktuellen Zweigs zusätzlich zu den Änderungen, die zusammengeführt werden, neu begründen?

144

In Ordnung. Wenn ich mich in einem Zweig befinde (z. B. working) und die Änderungen eines anderen Zweigs zusammenführen möchte (z. B. master), führe ich den Befehl aus, git-merge masterwährend ich mich in dem workingZweig befinde, und die Änderungen werden zusammengeführt, ohne den Verlauf überhaupt neu zu begründen. Wenn ich laufe git-rebase master, werden die Änderungen in neu masterbasierend, um oben in meinem workingZweig platziert zu werden. Aber was ist, wenn ich die Änderungen von zusammenführen möchte, masteraber meine Änderungen neu begründen möchte, um an der workingSpitze zu sein? Wie mache ich das? Kann es gemacht werden?

Ich könnte git-rebase workingin meinem masterZweig laufen , um meine Änderungen in den masterZweig zu übernehmen, aber ich würde das gerne in meinem workingZweig tun können , und ich habe keine Ahnung, wie. Das nächste, was ich mir mastervorstellen kann, ist, einen neuen Zweig daraus zu erstellen workingund die Änderungen darüber hinaus neu zu definieren, aber dann hätte ich einen neuen Zweig, anstatt den workingZweig zu ändern .

Jonathan M Davis
quelle

Antworten:

255

Du hast was rebaserückwärts macht. git rebase mastertut, was Sie verlangen - nimmt die Änderungen am aktuellen Zweig (seit seiner Abweichung vom Master) und spielt sie darüber ab masterund setzt dann den Kopf des aktuellen Zweigs auf den Kopf dieses neuen Verlaufs. Es nicht wiederholen die Änderungen von masteroben auf den aktuellen Zweig.

Hobbs
quelle
3
@ Jonathan es ist cool. Dies ist ein etwas kniffliges Thema. Übrigens, git rebase workingwürde die masterÄnderungen (nach dem Punkt, der sich workingverzweigte) auf den workingZweig verschieben - aber das ist nicht sehr sinnvoll master:)
Hobbs
66

Eine andere Sichtweise ist, Folgendes zu betrachten git rebase master:

Starten Sie den aktuellen Zweig über neu master

Hier ist ' master' der Upstream- Zweig, und das erklärt, warum während einer Rebase oursund theirsumgekehrt .

VonC
quelle
Das erklärt auch, warum LOCAL und REMOTE umgekehrt sind. Vielen Dank.
AVIDeveloper
@ AVIDeveloper auf LOCAL und REMOTE, können Sie auch stackoverflow.com/a/3052118/6309
VonC
5
@@ VonC: Danke. Ja, nachdem ich einen Nachmittag damit verbracht habe, vor mich hin zu murmeln "REMOTE ist mein Zweig ... LOCAL ist nicht mein", ist alles eingesunken. Ehrlich gesagt hätte ich es vorgezogen, die Namen der Zweige (oder Abkürzung SHA) anstelle von REMOTE / LOCAL / zu sehen unsere / ihre / meine. Meine Gedanken sind die gleichen in Bezug auf das git difftoolschreckliche Links / Rechts. Ein bisschen abseits des Themas, aber difftoolich halte mich an Git-Meld und genieße Namen wie 'Working-Dir', 'Stash @ {0}' usw.
AVIDeveloper
1
@VonC: Können Sie erklären, wie es sein kann, dass, nachdem wir es getan haben: git checkout branch_to_update git rebase masterIch erhalte im Git-Protokoll die Commits des Masters über dem lokalen Zweig, stattdessen das Gegenteil?
JavaSa
1
@ JavaSa Das ist seltsam, es sei denn, die Rebase wurde nicht ordnungsgemäß abgeschlossen? Möglicherweise müssen Sie eine separate Frage mit weiteren Details stellen.
VonC