Mein Szenario ist, dass ich einen Zweig habe, in dem ich den Erstellungsprozess stark verbessert habe (Zweig A), und in einem anderen arbeite ich an einer nicht verwandten Funktion (Zweig B). Wenn ich mich jetzt in Zweig B abhacke, möchte ich das Zeug einholen, das ich in Zweig A geschrieben habe, weil ich schnellere und einfachere Builds möchte. Ich möchte jedoch meinen Zweig B nicht "verschmutzen", sondern nur Änderungen von Zweig A zu nicht bereitgestellten Änderungen hinzufügen.
Was ich versucht habe (wenn ich auf Zweig B stehe):
git merge --no-commit branchA
Funktioniert nicht, weil Sie dadurch zusammengeführt werden. Wenn es nicht wäre, wäre es perfekt.
git checkout branchA -- .
Funktioniert nicht, da Änderungen zwischen branchA..branchB und nicht zwischen dem Änderungsmaster..branchA angewendet werden.
Noch etwas?
Bearbeiten: Ja, Änderungen in Zweig A werden festgeschrieben. In diesem Beispiel gibt es nur einen Zweig mit Build-Verbesserungen, es können jedoch bis zu N Zweige mit Build-Verbesserungen vorhanden sein, die ich bei der Arbeit an einem Feature-Zweig anwenden möchte.
Antworten:
Ich musste nur etwas Ähnliches tun und konnte es durch Hinzufügen
--squash
zum Befehl zum Zusammenführen behebenquelle
git commit —amend
und es wird die neuen Änderungen an das letzte Commit anhängen. Ich bin mir nur nicht ganz sicher, ob es bei Merge-Commitscherry-pick -n
sollte tun, was Sie wollen, aber ich bin mir nicht sicher, warum Sie die Build-Verbesserungen als nicht bereitgestellte Änderungen wünschen - das erschwert nur einige Dinge (z. B. das Zusammenführen anderer Änderungen an den geänderten Dateien oder das erneute Basieren von Elementen).In diesem Fall würde ich einen neuen Zweig C erstellen, den Sie sowohl aus A als auch aus B (und allen anderen Zweigen mit Build-Verbesserungen) zusammenführen. Übernehmen Sie die Änderungen im Feature-Zweig B und führen Sie sie dann in den C-Zweig ein, der jetzt die Build-Verbesserungen und die Änderungen im Feature-Zweig enthält, damit Sie sie gemeinsam testen können. Wenn Sie weitere Änderungen vornehmen müssen, tun Sie dies in der entsprechenden Verzweigung, nicht in C, und führen Sie sie dann zu C zusammen. Ändern Sie also niemals etwas in der C-Verzweigung, sondern verwenden Sie sie einfach, um Änderungen aus anderen Verzweigungen zu integrieren.
Das bedeutet, dass Sie alle Funktionen von Git in Zweig C verwenden können, anstatt nicht festgeschriebene Änderungen in einem schmutzigen Baum zu jonglieren.
quelle
cherry-pick -n
: Ich habe eine Arbeitskopie meines Codes erstellt, indem ich zufälligen Stellen viele Dinge hinzugefügt habe. Jetzt möchte ich meinen Code bereinigen, bevor ich mich für den Zweig dieser Funktion begebe. Also wechsle ich zu einem temporären Zweig, festschreibe alle Änderungen. Kommen Sie zurück zum Feature-Zweig,cherry-pick
der festschreibt. Gibt es einen besseren Weg, dies zu tun?Sie sollten in der Lage sein, die Commits auszuwählen (mit
-n
, um ein sofortiges Commit zu vermeiden).quelle
Ich bin nicht 100% sicher, ob ich es klar verstanden habe, aber in meinem Fall habe ich gerade einen Diff-Patch zwischen Zweigen erstellt und diesen Pfad dann auf den B-Zweig angewendet.
Innerhalb von Zweig A:
quelle
Ich bin mir nicht sicher, ob ich Ihre Anforderungen verstehe.
Sie können eine Zusammenführung ausführen und dann aufrufen
git reset HEAD~1
.Die folgende Sequenz sollte jedes Commit zwischen
master
undbranchA
über abspielenbranchB
. Commits, die bereits angewendet wurdenbranchB
, werden übersprungen.quelle
--soft
Option, wenn Sie die Änderungen im bereitgestellten Bereich nicht möchten. Können Sie ein Diagramm zeichnen, wie Ihre Zweige eingerichtet sind?