2016-05-12 8 views
2

Das ist also ein großer. Ich habe Branch Change-Zweig wie unten erwähnt erstellt und ich muss Änderungen von 1.3.6 und 1.4.1 in diesen Zweig zusammenführen. Jetzt ist das Problem, dass ich die Änderungen selektiv zusammenführen möchte. Ich will nicht alle Änderungen von 1.3.6 in den Änderungszweig. Wie gehe ich mit diesem hier vor?Wie kann ich zusammenführen, ohne den Commit-Verlauf zu verlieren?

Das ist die Struktur

master 
|- track1 
|- track2 
|---|- msr-657 
|---|---|--1.4.1 
|---|---|--change-branch 
|- track3 
|---|-- 1.3.6 
+1

Klingt wie ein Job für 'Cherry-Pick'. – isherwood

+0

Danke @isherwood –

Antwort

1

Sie vier Möglichkeiten haben: den merge Befehl mit dem --no-commit Flag verwendet, unter Verwendung von revert nach einem merge, ein selektiven rebase oder cherry-pick verwenden.

Das Zusammenführen mit --no-commit ist wahrscheinlich das Beste, um die Historie zu erhalten, aber es wird mehr Arbeit erfordern, da Sie die Änderungen manuell zurücksetzen müssen, bevor Sie sich verpflichten.

Eine andere Option ist merge, dann wird revert mit git revert geändert. Dies wird die Geschichte jedoch nur noch unordentlicher machen.

Wenn Sie sich nicht darum kümmern, dass die Historie "pure" ist, können Sie einfach rebase verwenden, aber das funktioniert nur sicher, wenn Sie Ihre Änderungen nicht bereits auf das allgemeine Repo übertragen haben (wenn Sie mit anderen arbeiten). oder Sie tun die Rebase von einem wegwerfenden Zweig. Sie würde so etwas tun:

git rebase --interactive master 1.3.6 

Dies würde rebase Ihre Änderungen auf Meister von 1.3.6, würde aber zunächst können Sie wählen, welche zu halten verpflichtet, zu bearbeiten oder zu ignorieren. Ich bin mir ziemlich sicher, dass es jeden Zweig löschen Sie eine rebase aus tun, so sollten Sie wahrscheinlich einen anderen Weg werfen Zweig an der gleichen Stelle wie 1.3.6 vor Ihnen rebase machen, dann machen master Punkt auf die gleiche Verpflichtung wie die Wegwerf-Filiale, dann Löschen Sie schließlich den Wegwerfzweig.

Mit cherry-pick können Sie Commits selektiv zusammenführen, ohne sich jedoch beide Eltern explizit zu merken. Wenn der Zweig 1.3.6 im ursprünglichen Repo beibehalten wird, ist es keine besonders große Sache, beide Merge-Parents nicht zu haben, da Sie den Verlauf irgendwo noch haben, und cherry-pick kann automatisch auf die Commit-Nummer in der Beschreibung verweisen. Dies schafft eine unreine Geschichte wie eine selektive rebase tut.

Am Ende hängt es davon ab, ob Sie um den Zweig 1.3.6 halten und wie Sie Ihre Geschichte schließlich aussehen soll.

2

git cherry-pick ist die einfachste. Sie können git cherry-pick beliebige verpflichten Sie wollen in den aktuellen Kopf. Sie können auch git cherry-pick A..B zu Kirsche holen alle Commits von A Kind zu B. versuchen

git rebase auch stark genug ist, um die Arbeit zu tun, aber es ist ein bisschen schwierig und verwirrend .

Verwandte Themen