Wie kann ich eine Gabel vom Original resynchronisieren?


33

Ich habe gerade ein Projekt in Github gespalten. Ich habe Änderungen vorgenommen und eine Pull-Anfrage gesendet. Der Besitzer hat meine Gabel mit dem Hauptprojekt zusammengeführt und danach einige Änderungen vorgenommen. Daher ist mein Fork derzeit nicht mit dem Hauptprojekt aktualisiert. Ich vermisse die Änderungen, die er nach dem Zusammenführen meiner Pull-Anfrage vorgenommen hat. Wie kann ich meine Gabel mit dem Hauptprojekt aktualisieren? Gibt es eine Möglichkeit, dies im Webinterface zu tun?

Vielen Dank


Ich schreibe eine einfache Anweisung. Check-out hier: webapps.stackexchange.com/a/58140/63016
Youngjae

2
Es gibt jetzt ein offizielles Dokument, das gut gemacht ist: help.github.com/articles/syncing-a-fork
Andre Miras

Antworten:


36

Durch das Forken eines Projekts wird ein separates Repo erstellt, das nicht aktualisiert wird, wenn sich das ursprüngliche Repo ändert. Es gitist jedoch ziemlich einfach, manuell zu aktualisieren.

Sie benötigen die Hilfe eines dritten Repositorys (Ihre lokale Kopie reicht aus). Es gibt 3 Repos:

  • "Upstream": Das Repository des Upstream-Projekts auf Github.
  • "Origin": Das Repository Ihrer Gabel auf Github
  • "Lokal": Ihr lokales Repository auf Ihrem Computer. Ich gehe davon aus, dass Sie es durch Klonen von Fork mit erstellt git clone git@github.com:your-username/projectname.githaben und dass jeder Branch verwendet master.

Angenommen, "Origin" und "Local" befinden sich im selben Status, und "Upstream" hat mindestens 1 Commit Vorsprung (Zusammenführung und alle nachfolgenden Änderungen).

Fügen Sie zuerst das vorgelagerte Projekt als Git-Remote hinzu :

git remote add upstream https://github.com/upstream-username/projectname.git

Dann ziehen (was bedeutet , holt und dann verschmelzen automatisch) die Änderungen von dem der Remote - masterNiederlassung in Ihren lokalen Repository des aktuellen ( master) Zweig:

git pull upstream master

Jetzt ist Ihr lokales Repository mit synchronisiert upstream. Zum Schluss schieben Sie Ihr lokales Repo an Ihre Github-Gabel:

git push origin master

Jetzt ist alles synchron.


2
Vielen Dank .. es ist eine Schande, dass dies möglicherweise nicht möglich ist, dies im Webinterface zu machen ..
BAN

1
Dies ist in der Tat über das Webinterface möglich: webapps.stackexchange.com/a/31010/10390
thSoft

Yeehaw! Ich hatte mir die Haare ausgerissen, um diese expliziten Informationen zu finden. Danke für das Teilen!
Pepoluan

... aber sehen Sie sich auch die Kommentare der Antwort an, um zu beweisen, dass Resync via Web nicht die beste Option ist, da es das Repository verschmutzt
usr-local-ΕΨΗΕΛΩΝ

was machst du, wenn nach dem pull "schon auf dem laufenden" steht, aber offensichtlich nicht? (Es gibt Dateien, die ich alle in einem Unterverzeichnis geändert habe, und ich sollte keine Unterschiede in einer anderen Datei haben, aber ich weiß)
roberto tomás

1

Sie müssen eine Fernbedienung hinzufügen (siehe GitHub-Hilfe ) und von dieser neuen Fernbedienung abrufen.

git remote add mainProject https://github.com/user/mainProject
git pull mainProject master

0

Ich fand, dass diese Antwort die ursprüngliche Antwort ergänzt, da es sich nur um die Synchronisierung eines Zweigs (Masters) handelt. Wenn der Zweig seit Ihrer Abzweigung auf dem Upstream erstellt wurde, ist es ein wenig aufwändiger, ihn auf Ihrer Abzweigung zu erstellen.

Die kurze Antwort lautet: Führen Sie diesen Befehl aus, um Ihren Zweig mit jedem Zweig im Upstream-Repository zu aktualisieren.

for branch in $(git ls-remote --heads upstream|sed 's#^.*refs/heads/##'); do git push origin refs/remotes/upstream/$branch:refs/heads/$branch; done

Was dies nicht tut, ist, alle Zweige von Ihrer Gabel zu entfernen, die vom Upstream gelöscht wurden. Es gibt keine Möglichkeit, dies zu automatisieren, insbesondere wenn Sie auf Ihrer Gabel Zweige erstellt haben.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.