2011-01-16 8 views
2

Die verwandten Fragen, die SO mir anbieten, beantworten nur einfache Fälle, die mit einem Pull gelöst werden können - aber das funktioniert nicht gut, wie Sie unten sehen werden.Hat eine Verzweigung das Original-Repo, wenn der ursprüngliche Master-Zweig nicht zusammengeführt werden kann?

Es gibt ein Repository, das ich gegabelt habe, mit nur einem master Zweig, und ich habe es gegabelt, und ich habe sowohl in meinem master, und einem neuen Zweig meines eigenen, rw-style gearbeitet. Der Besitzer des gegabelten Repositorys hat einige meiner Änderungen begangen, aber keine anderen; Die schwarzen Punkte oben rechts unten stehen für Commits von meinen beiden Niederlassungen master und rw-style.

alt text

Ich bin mir bewusst, die Gabel-Warteschlange verwendet, ist keine gute Idee, so bleibe ich weg von ihr. Die Verwendung von git pull funktioniert, aber es erstellt einen Konflikt, den ich dann lösen müsste, und es führt auch zu doppelten Verlauf für meine master-Zweig, und das sieht nicht besonders hübsch aus.

Ich kenne derzeit keine anderen Lösungen, also überlege ich gerade, aus zwei Commits, die ich noch nicht gepusht habe, einen Patch zu erstellen, lösche meine Fork, erstelle sie erneut aus dem Original und bewerbe mich dann meine Patches darüber.

Ist das die einzige Lösung?

git rebase origin/master 

(während in der Gabelzinke):

Antwort

1

Sie können Ihre Gabel auf Master, über rebase. Alternativ könntest du auch - deinen Gabelzweig auf deinen Master-Zweig zurücksetzen, und dann jeden Commit aus deinem Gabelzweig zurücknehmen (aber die Rebase wird viel weniger funktionieren, wenn du nicht nur durch ein paar Commits gegabelt wirst).

Sobald Sie das getan haben, sollten Sie in der Lage sein, Ihre verzweigte Verzweigung einfach in den Master-Zweig als eine Schnellvorlauf-Zusammenführung (keine Zusammenführung oder irgendetwas) zusammenführen. Wenn Sie jedoch eine der oben genannten Aktionen ausführen, werden alle Ihre Hashes in Ihrem Verzweigungszweig verfälscht. Tun Sie das also nicht, wenn Sie nicht sicher sind, dass nichts anderes auf den Verzweigungszweig verweist.

+1

Sorry, etwas verwirrt dort. Ich habe noch nie zuvor mit den Rebases gearbeitet. Als ich den Befehl ausprobierte, wurde mir gesagt "Aktueller Zweigmeister ist auf dem neuesten Stand.". Ich bin mir nicht sicher, auf welchen Zweig man sich als gegabelter und als Master bezieht. – unrelativity

+3

@ a2h: Rebase, wenn ein Argument angegeben wird, versucht, den aktuellen Zweig auf dieses Argument umzuset- zen. Ich glaube, dass in Ihrem Fall, was Sie wirklich tun möchten, ist das Original-Projekt als Remote hinzufügen: 'git remote hinzufügen Start ', holen Sie seinen aktuellen Zustand: 'git fetch Start', und dann auf * das *:' Rebase Git Rebase Start/Master'. (Ich habe den ursprünglichen Pre-Fork-Repo "Start" aufgerufen, so dass er nicht wie der Ursprung aussieht.) Vermutlich ist der Ursprung in Ihrem aktuellen Repository das Github-Projekt, nicht das Original, also "Master" ist in der Tat aktuell mit "Herkunft/Meister". – Cascabel

+0

@ a2h: Allerdings: Wenn es Konflikte mit einem versuchten Zusammenführen gibt, gibt es auch Konflikte mit einem versuchten Rebase. Es ist möglich, dass Sie dies beheben können, indem Sie 'git rebase -i' (interaktiv) verwenden und Zeilen für Commits entfernen, deren Inhalt sich bereits im Master des ursprünglichen Repos befindet. – Cascabel

Verwandte Themen