2010-03-08 12 views
9

Ich habe eine git-cpan-init von einem Repo, die einen anderen Wurzelknoten aus einem anderen bereits etablierten Git Repo ergab ich auf GitHub C:A:S:DBI gefunden. Ich habe in meinem Repo einiges entwickelt und möchte meine Änderungen an einer Verzweigung des autoritativeren Repositories zusammenführen oder wiederholen. Weiß jemand, wie man das macht? Ich denke, es ist sicher anzunehmen, dass keine Dateiinhalte der modifizierten Dateien unterschiedlich sind - die Codebasis ist seit dem 08. November nicht mehr vorhanden.Wie verbinde ich zwei Git-Repos ohne einen gemeinsamen Stamm, wo alle modifizierten Dateien gleich sind?

Aus Gründen der Klarheit ist der Git Hub Repo der maßgebliche. Mein lokaler Repo ist der, den ich auf Git Hub als echte Git Forke gehen möchte.

Antwort

15

Sie sollten in der Lage sein, einen Remote zu Ihrem vorhandenen Repository hinzuzufügen (mit git remote add), so dass Sie den Inhalt des Github-Repositorys in Ihr vorhandenes Repository abrufen können.

Angenommen, Sie haben ein Commit in Ihrem Verlauf (nennen Sie es O) und ein Commit in der Remote-Verzweigung (nennen Sie es R), die dem gleichen Satz von Dateien entsprechen (z. B. sind beide Importe der gleichen Release-Version) , dann kannst du einfach eine 'auf' Rebase machen. Vorausgesetzt, dass Sie die Spitze Ihrer Änderungen haben zur Zeit ausgecheckt:

git rebase --onto R O    # R and O are sha1 ids (possibly abbreviated) 

Dieses Replays alle Ihre Commits seit O auf die neue R Wurzel begehen.

Sobald Sie dies getan haben, wenn Sie nicht mit dem neuesten Remote-Master-Zweig auf dem neuesten Stand sind, können Sie eine normale Rebase verwenden, um dorthin zu gelangen und gits History Tracking wird dafür sorgen, dass Ihre Änderungen in einer Weise angewendet werden Sinn.

git rebase <remote_name>/master # where <remote_name> is whatever 
            # you called the github remote when 
            # you used git remote add 
+1

ich 'git remote add github ', dann, ich 'git checkout -b new_master', dann ich' git reset --hard' dass new_master auf den Kopf von 'github/master', dann habe ich die' git Rebase - auf '. Dies sagte: "Zuerst, Kopf zurückspulen, um Ihre Arbeit darüber zu wiederholen ... Schnell-Weiterleitung new_master zu 78672c96f2eb0717581f53b300c9243a5b446340" aber wenn ich 'git log' auf meinem' new_master' sehe, sehe ich die Änderungen nicht und sie aren ' t in meinem Arbeitsverzeichnis. –

+0

alle Rebasing-Diagramme in 'git Rebase', scheinen gemeinsame Wurzeln zu zeigen. Dies gilt nicht für mich. Ich bin mir nicht sicher, ob ich einen Apfel sozusagen auf eine Orange bringen kann. –

+0

Warum haben Sie 'github/master'' zurückgesetzt? Wenn Sie dies tun, gibt es keinen Unterschied zwischen Ihrer Branche und dem sha1 des neuen Masters, so dass die Rebase schnell vorrückt und keine Ihrer Änderungen anwendet. Sie müssen auf _ihr_ Zweig verzweigen. Das '--onto' weist git an, Zweige ohne einen gemeinsamen Vorfahren zu kreuzen, aber der ont-Parameter muss auf dem Zweig sein, den man oben aufbauen möchte, und der verbleibende Parameter muss einige Commits haben, die angewendet werden können. –

Verwandte Themen