
Lea Hayes
Ich habe ein Projekt gegabelt, mehrere Korrekturen angewendet und eine Pull-Anforderung erstellt, die akzeptiert wurde. Ein paar Tage später wurde eine weitere Änderung von einem anderen Mitwirkenden vorgenommen. Meine Gabel enthält diese Änderung also nicht.
Wie bekomme ich das Wechselgeld in meine Fork? Muss ich meinen Fork löschen und neu erstellen, wenn ich weitere Änderungen beizutragen habe? Oder gibt es einen Update-Button?

lobzik
Ab Mai 2014 ist es möglich, einen Fork direkt von GitHub aus zu aktualisieren. Dies funktioniert noch im September 2017, ABER es wird zu einem schmutzigen Commit-Verlauf führen.
- Öffnen Sie Ihren Fork auf GitHub.
- Klicke auf Pull-Requests.
- Klicke auf Neuer Pull-Request. Standardmäßig vergleicht GitHub das Original mit Ihrem Fork, und es sollte nichts zu vergleichen sein, wenn Sie keine Änderungen vorgenommen haben.
- Klicken Basis wechseln wenn Sie diesen Link sehen. Andernfalls manuell einstellen Basisgabel Drop nach unten zu Ihrer Gabel, und die Kopf Gabel zum stromaufwärts. Jetzt vergleicht GitHub Ihren Fork mit dem Original, und Sie sollten alle neuesten Änderungen sehen.

- Pull-Request erstellen und weisen Sie Ihrer Pull-Anfrage einen vorhersehbaren Namen zu (z. B.
Update from original
).
- Scrollen Sie nach unten zu Pull-Request zusammenführenaber klicken Sie noch nichts an.
Jetzt haben Sie drei Optionen, aber jede führt zu einem weniger als sauberen Commit-Verlauf.
- Die Standardeinstellung erstellt einen hässlichen Merge-Commit.
- Wenn Sie auf das Dropdown-Menü klicken und „Squash and merge“ wählen, werden alle dazwischenliegenden Commits zu einem zusammengefasst. Das ist meistens etwas, was Sie nicht wollen.
- Wenn Sie klicken Rebasieren und zusammenführenwerden alle Commits “mit” Ihnen gemacht, die Original-PRs werden auf Ihre PR verlinken und GitHub wird angezeigt
This branch is X commits ahead, Y commits behind <original fork>
.
Also ja, Sie können Ihr Repo über die GitHub-Web-Benutzeroberfläche mit seinem Upstream auf dem neuesten Stand halten, aber dadurch wird Ihr Commit-Verlauf beschmutzt. Bleiben Sie stattdessen bei der Befehlszeile – es ist ganz einfach.

Sahar Rabinoviz
Viele Antworten führen dazu, dass Sie Ihre Gabel bewegen ein Commit voraus des übergeordneten Repositorys. Diese Antwort fasst die gefundenen Schritte zusammen Hier welches wird Verschieben Sie Ihren Fork auf denselben Commit wie den Parent.
-
Wechseln Sie in Ihr lokales Repository.
- Wechseln Sie zum Master-Zweig, wenn dies nicht der Fall ist
git checkout master
-
Fügen Sie das übergeordnete Element als Remote-Repository hinzu, git remote add upstream <repo-location>
- Problem
git fetch upstream
-
Problem git rebase upstream/master
- In diesem Stadium überprüfen Sie, ob das Festschreiben, was durch Eingabe zusammengeführt wird
git status
-
Problem git push origin master
Weitere Informationen zu diesen Befehlen finden Sie unter Schritt 3.
Wenn, wie ich, Sie Übergebe niemals etwas direkt dem Meisterwas Sie wirklich sollten, können Sie Folgendes tun.
Erstellen Sie aus dem lokalen Klon Ihres Forks Ihre Upstream-Fernbedienung. Das müssen Sie nur einmal tun:
git remote add upstream https://github.com/whoever/whatever.git
Wann immer Sie dann den Upstream-Repository-Master-Zweig einholen möchten, müssen Sie Folgendes tun:
git checkout master
git pull upstream master
Angenommen, Sie haben selbst nie etwas gegen den Meister begangen, sollten Sie bereits fertig sein. Jetzt können Sie Ihren lokalen Master zu Ihrem Ursprungs-Remote-GitHub-Fork pushen. Sie könnten Ihren Entwicklungszweig auch auf Ihren jetzt aktuellen lokalen Master umbasieren.
Nach der anfänglichen Upstream-Einrichtung und dem Master-Checkout müssen Sie nur noch den folgenden Befehl ausführen, um Ihren Master mit dem Upstream zu synchronisieren: git pull upstream master.
Vorwort: Ihr Fork ist der “Ursprung” und das Repository, von dem Sie gegabelt haben, ist der “Upstream”.
Nehmen wir an, Sie haben Ihren Fork bereits mit einem Befehl wie diesem auf Ihren Computer geklont:
git clone git@github.com:your_name/project_name.git
cd project_name
Wenn das gegeben ist, müssen Sie in dieser Reihenfolge fortfahren:
-
Fügen Sie den „Upstream“ zu Ihrem geklonten Repository („Ursprung“) hinzu:
git remote add upstream git@github.com:original_author/project_name.git
-
Holen Sie sich die Commits (und Zweige) vom “Upstream”:
git fetch upstream
-
Wechseln Sie zum „Master“-Zweig Ihres Forks („Origin“):
git checkout master
-
Verstauen Sie die Änderungen Ihres „Master“-Zweigs:
git stash
-
Führen Sie die Änderungen aus dem „Master“-Zweig des „Upstream“ in den „Master“-Zweig Ihres „Ursprungs“ zusammen:
git merge upstream/master
-
Lösen Sie Zusammenführungskonflikte, falls vorhanden, und bestätigen Sie Ihre Zusammenführung
git commit -am "Merged from upstream"
-
Schieben Sie die Änderungen auf Ihren Fork
git push
-
Holen Sie sich Ihre gespeicherten Änderungen zurück (falls vorhanden)
git stash pop
-
Du bist fertig! Glückwünsche!
GitHub bietet auch Anleitungen zu diesem Thema: Fork synchronisieren
9866700cookie-checkWie aktualisiere oder synchronisiere ich ein Fork-Repository auf GitHub?yes
Dies kann auch über die Github-Benutzeroberfläche erfolgen. Ich möchte Kredit geben [to this other poster][1]. [1]: stackoverflow.com/a/21131381/728141
– Mike Schroll
20. Februar 2014 um 13:00 Uhr
Ein weiterer guter Blogbeitrag dazu – Einen GitHub-Fork auf dem neuesten Stand halten
– Arup Rakshit
15. Oktober 2014 um 17:26 Uhr
Gefunden in den Github-Hilfeartikeln: help.github.com/articles/syncing-a-fork
– Pranav
2. April 2015 um 8:57 Uhr
Ist dies ein Duplikat von stackoverflow.com/questions/3903817/… ?
– David Cary
29. August 2015 um 12:06 Uhr
Seit Mai 2021 ist dies direkt aus der GitHub-UI ohne extra Pull-Request möglich, siehe Änderungsprotokoll und stackoverflow.com/a/67425996
– Marcono1234
8. Mai 2021 um 0:23 Uhr