Zusammenführen zwischen Gabeln in GitHub

259

Ich habe ein GitHub-Repository gegabelt. Dann habe ich einige Änderungen an meiner Gabel vorgenommen. Dann hat das ursprüngliche Repository meine Änderungen und einige andere zusammengeführt. Jetzt möchte ich die fehlenden Änderungen zusammenführen. Ich habe einen einfachen Pull gefolgt von Push versucht, aber dies ergibt meine Commits in doppelter Ausfertigung. Was ist der beste Weg, um es zu tun?

R. Martinho Fernandes
quelle

Antworten:

352

Sie haben wahrscheinlich eine "Fernbedienung" für jedes Repository. Sie müssen von der einen Fernbedienung ziehen und zur anderen drücken.

Wenn Sie ursprünglich von Ihrer Gabel geklont haben, wird diese Fernbedienung als "Ursprung" bezeichnet. Wenn Sie es noch nicht hinzugefügt haben, müssen Sie das Repository der ersten Person als eine andere Fernbedienung hinzufügen:

git remote add firstrepo git://github.com/first/repo.git

Nachdem das alles eingerichtet ist, sollten Sie in der Tat in der Lage sein

git pull firstrepo master
git push origin

Denken Sie daran, git pullist nichts anderes als ein Makro , das tut git fetchund git mergein dieser Reihenfolge. Sie müssen nur die Liste der Commits aus dem Repository der ersten Person abrufen und dann deren Zweig in Ihrem Baum zusammenführen. Das Zusammenführen sollte mit Ihren Commits in beiden Zweigen das Richtige tun.

GitHub bietet Ihnen in all seiner fortwährenden Attraktivität natürlich eine Abkürzung. Auf Ihrer Abzweigung des Repositorys befindet sich eine Schaltfläche "Schnellvorlauf", mit der Sie Ihre Abzweigung aufholen können, wenn Sie vollständig auf der anderen Seite zusammengeführt sind.

Jim Puls
quelle
1
Gibt es eine Möglichkeit, dies vollständig mit Remote-Operationen zu tun? Wenn ich das richtig verstehe, werden Sie mit dieser Methode alle Änderungen in das lokale Repository herunterladen und sie dann alle wieder auf die Gabel auf Github hochladen (pushen). Ich würde lieber einfach alle Änderungen direkt in die Gabel auf Github ziehen.
Ken Liu
1
Git unterstützt das nicht. Glücklicherweise hat Github jetzt eine Schaltfläche zum Zusammenführen in der Weboberfläche.
Cweiske
13
@cweiske - wo ist dieser Merge-Button? Ich habe alle Admin-Seiten und Hauptseiten durchgesehen, kann sie aber nicht finden :(.
Adam
2
@ Adam, es ist auf der Pull Request Seite. Der Forker würde also eine Pull-Anfrage öffnen, um einen seiner Zweige mit einem Ihrer Zweige zusammenzuführen. Dort können Sie auf die Schaltfläche Zusammenführen klicken.
Rob Barreca
2
Die Schaltfläche Schnellvorlauf scheint nicht mehr verfügbar zu sein. Zur Information habe ich eine andere Git- URL in meinem Befehl verwendet:git remote add snaury [email protected]:snaury/script-runner
Olibre
72

Die oben akzeptierte Antwort hat bei mir also nicht perfekt funktioniert. Es schien nämlich die Verbindung zum ursprünglichen Github-Autor zu verlieren, als es funktionierte, und danach schien es nicht mehr zu funktionieren. Ich denke, das Problem war, dass die Antwort das / zwischen dem Remote-Namen und dem Zweig wegließ. Es würde also einen Zweig namens Master von der Fernbedienung abrufen, aber dann nichts damit anfangen können. Ich weiß nicht genau warum.

Hier ist die Art und Weise, wie Github von ihrer Website empfiehlt .

Sobald Sie Ihr gegabeltes Repo geklont haben, müssen Sie eine Fernbedienung hinzufügen, die auf das Original zeigt, wie in der vorherigen Antwort angegeben. Sie nennen es gerne Upstream, aber das spielt keine Rolle.

git remote add upstream git://github.com/octocat/Spoon-Knife.git

Dann holst du

git fetch upstream

und Sie sehen die Versionen, die zum Zusammenführen verfügbar sind

From git://github.com/octocat/Spoon-Knife.git
 * [new branch]      gh-pages   -> upstream/gh-pages
 * [new branch]      master     -> upstream/master

Dann müssen Sie nur noch den Zweig auswählen, in dem Sie zusammenführen möchten. Beachten Sie jedoch, dass dies keine lokalen Zweige sind, sondern unter Fernbedienungen gespeichert werden. Vorausgesetzt, Sie haben keinen lokalen Zweig namens Upstream / Master (was zulässig ist), sollten Sie mit der folgenden Zeile gut verschmelzen:

git merge upstream/master

Alternativ können Sie das Abrufen / Zusammenführen (mindestens nach dem ersten Abrufen) mit dieser Zeile verknüpfen:

git pull upstream/master
Bob Spryn
quelle
Das Problem ist, dass, wenn Sie bereits Änderungen haben, die Änderungen, die Sie übernehmen, ein Zusammenführungs-Commit erstellen. In einigen Fällen nützlich, aber meistens etwas sinnlos.
Pablo Olmos de Aguilera C.
1
In diesem Fall git rebasewürde die Verwendung weitaus besser funktionieren und die hässlichen leeren Merge-Commits
weglassen