2016-11-12 2 views
1

Ich habe ein Projekt (von Zweig A) gespalten, und es scheint, dass es aus irgendeinem Grund in einem anderen Zweig (B) fortgesetzt wurde.Von einem Git Zweig zu einem anderen zu bewegen und nur meine Änderungen

Ich habe versucht, meine Gabel (M) mit dem neuen Zweig (B) zusammenzuführen, aber das hat eine Menge Konflikte zur Folge. Die Konflikte liegen darin, dass der neue Zweig (B) einen älteren Zweig (O) verzweigt hat und ein Teil der Änderungen von A nicht an B übergeben wurde.

Jetzt möchte ich, dass alle meine Änderungen (in Zweig M) zusammengeführt werden der neue Zweig B ohne Konflikte, von A auf den Ursprung O in meiner Gabel alle Änderungen Cancelling M.

enter image description here

, was ich in rot wollen. Wie mache ich das?

+0

Ich folge nicht, was passiert. Können Sie Ihre Frage klären, möglicherweise mit einem Verzweigungsdiagramm? –

+0

Ich habe ein Diagramm hinzugefügt, hoffe, Sie verstehen, ich möchte B "Gabel", mit den Änderungen, die ich an der Gabel von A. – prognoza

+0

Ich denke, was Sie meinen, ist, dass Sie Commit M auf Commits O und A gemacht haben aber jetzt möchte ich nur das letzte Commit auf B anwenden, das in seinem Graphen ebenfalls O hat, aber in einem anderen Zweig als A und (momentan) M. In welchem ​​Fall haben Sie sich mit dem "Rosinenpicken" beschäftigt? Sie werden wahrscheinlich noch einige Konflikte lösen müssen. – jonrsharpe

Antwort

1

Eine Möglichkeit wäre, den Bereich der Festschreibungen im M Zweig kirsch Pick die aufgetreten, nachdem die A Commit vom B Zweig:

git checkout B 
git cherry-pick 2an38xma..f8s3kow2 

Hier 2an38xma ist der SHA-1-Hash oder einzigartigen Bezeichner des A Commits im Zweig M. Sie können diesen Commit-Hash finden, indem Sie git log aus dem Zweig A eingeben und nach unten scrollen, bis Sie das Commit A finden. Der in git cherry-pick verwendete Bereich besagt, dass die Commits nachA commit bis zum endgültigen Commit f8s3kow2 im Zweig M eins nach dem anderen angewendet werden.

Bedenken Sie, dass Sie mit jedem Commit Merge-Konflikte bekommen können.

+0

Es gibt ein Problem: Der gegabelte Zweig (M) wurde mehrmals mit A. verschmelzen. So kann dies eine Menge Probleme verursachen. Was helfen könnte, ist, dass nur ein Benutzer (ich) in der gegabelten Zweig (M) verpflichtet. – prognoza

+0

Die allgemeine Lösung ändert sich nicht. Identifizieren Sie die Commits, die Sie wollen, und wählen Sie sie aus. Übrigens ist Ihr Diagramm unzureichend, weil es die Mehrfachverschmelzungen nicht zeigt. –

+0

Wir reden über Hunderte von Änderungen ... Gibt es eine Option, alle meine Commits zu pflücken? – prognoza

1

Zuerst eine Kopie der ursprünglichen M Zweig mit git branch M.old M, so dass Sie trivialerweise neu beginnen können, wenn die Dinge nicht so enden, wie Sie es wollen.

Dann können Sie Ihren M Zweig rebase von B mit

git rebase --onto B A M 

Dies sollten Sie genau die roten M Filiale in Ihrer Zeichnung zu beginnen.

A hier markiert den Start (nicht einschließlich) von, wo Sie Änderungen berücksichtigen möchten und M der Endpunkt (einschließlich), der auf das Rebase-Ergebnis aktualisiert wird.

Verwandte Themen