Wie aktualisiere ich einen GitHub Repo Fork im Webinterface?

58

Ich habe ein Github-Repository, das ich vor einigen Monaten aus einem anderen Projekt gespalten habe. Es ist jetzt einige Monate später und das ursprüngliche Master-Repo hat sich geändert. Ich möchte mein Repo aktualisieren, um diese Änderungen widerzuspiegeln. Ist dies in der Github-Weboberfläche möglich? Oder muss ich nur das Repo löschen und es neu teilen?

Jake Wilson
quelle

Antworten:

43

Sie können versuchen, die Abrufanforderungen umzukehren.

  1. Geh zu deiner Gabel
  2. Geben Sie eine Pull-Anfrage aus

    Standardmäßig ist dies Ihre Gabelung auf der rechten Seite ( Head-Repo ), die Sie auffordert, ihre Commits zu verschieben, und Änderungen am ursprünglichen Repo ( Base-Repo ) auf der linken Seite vornimmt .

  3. Klicken Sie auf die Dropdown-Liste für das Basis-Repo und das Head-Repo und wählen Sie die jeweils anderen Repos aus.

    Sie möchten, dass Ihr Repository auf der linken Seite aufgeführt wird (Änderungen werden akzeptiert), während sich das ursprüngliche Repository auf der rechten Seite befindet (das Repository, dessen Änderungen verschoben werden sollen). Wie in diesem Bild dargestellt:

    Gabel über sich selbst gemacht

  4. Senden Sie die Pull-Anfrage

    Wenn an Ihrer Gabel keine Änderungen vorgenommen wurden, sollten Sie die Zusammenführung automatisch akzeptieren können.

Wenn Ihr Code in Konflikt gerät oder nicht sauber genug ist, funktioniert das Update über die GitHub-Weboberfläche nicht. Sie müssen den Code abrufen und alle Konflikte auf Ihrem Computer beheben, bevor Sie auf Ihre Abzweigung zurückgreifen.

Acht Tage Unwohlsein
quelle
3
Das funktioniert immer noch, aber es ist nicht ideal. Es ist definitiv nur ein Trick. Nicht der richtige Weg, es zu tun.
Jake Wilson
3
Bestätigt eine schlechte Idee. Dies verschmutzt das Repository auf eine Weise, dass Github vorschlägt, eine leere Festschreibung für das ursprüngliche Projekt anzufordern. Siehe zum Beispiel github.com/dthommes/RoboSpring/pull/3 - Sobald ich dazu beigetragen habe, habe ich synchronisiert und jetzt möchte Github, dass ich einen "Syncing my fork" -Commit mit der Bezeichnung "Merge pull request # 1 from dthommes / master" drücke ... "
usr-local-ΕΨΗΕΛΩΝ
1
Ich glaube nicht, dass das mehr funktioniert. Obwohl es etwas seltsam erscheint, gibt es keinen einfachen Weg, dies zu tun.
Toby Allen
1
Ich habe gerade versuchte es, und es nicht sofort scheinen zu arbeiten - beim Wechsel einer der Gabeln es sofort eine „Vergleich Änderungen“ Seite geöffnet. Wenn Sie jedoch auf den Link "Vergleichen zwischen Gabeln" klicken, kann die andere Gabelung trotzdem geändert werden. Vielleicht könnten Sie Ihrer Antwort etwas hinzufügen.
Peter Mortensen
4
GitHub sollte eine "Sync Fork" -Schaltfläche hinzufügen, damit Sie keine Million PRs erstellen müssen. Im
Moment benutze
22

Es wird einfacher sein.

  1. Gehen Sie zum Forked Repo (Ihres) und klicken Sie einfach auf die Schaltfläche "New pull request".
  2. Auf der sich öffnenden Seite befindet sich in der Nachricht unterhalb der Dropdown-Auswahl ein kleiner Link zu "Basis wechseln". Klicken Sie auf den Link.
  3. Jetzt führt es automatisch zu Ihrem ursprünglichen Repo. Klicken Sie auf die Schaltfläche " Pull-Anforderung erstellen" und schreiben Sie eine Commit-Nachricht.
  4. Jetzt führt es automatisch zu Ihrem gespaltenen Repo. Klicken Sie auf Pull-Anforderung zusammenführen und anschließend auf Zusammenführen bestätigen, um den Vorgang abzuschließen .
Youngjae
quelle
Sie sollten klarstellen, was diese grünen Tasten sind und es wäre eine gute Antwort ....
Rodrigo Graça
Dies ist definitiv die beste Antwort ab 4/2016.
dr01
7
Das Problem bei dieser Methode ist, dass sie Ihrer Filiale ein zusätzliches Commit hinzufügt, sodass sie nicht wirklich mit dem Upstream-Repo synchronisiert ist.
Mottie
@Mottie Gibt es eine Möglichkeit für uns zu wissen, ob unsere Gabel hinter der neuesten Upstream-Version steckt, und einen Unterschied der Änderungen zu sehen, ohne sie tatsächlich zu ziehen?
Sujay Phadke
1
@SujayPhadke Auf Ihrer Hauptgabel-Reposeite unter der Schaltfläche zum Auswählen von Zweigen befindet sich die Meldung "Dieser Zweig wird von xx hinter xxxx: master festgeschrieben.". Zum Anzeigen des Unterschieds befindet sich in derselben Zeile wie die Nachricht eine Schaltfläche zum Vergleichen. oder Sie können zu diesem Link gehen:https://github.com/{user}/{forkedRepoName}/compare/master...{originalRepo}:master
Mottie
3

So aktualisieren Sie ein Forked-GitHub-Repository mit Änderungen aus dem Remote-Upstream-Repository


Anweisungen aus der GitHub-Hilfe:

Konfigurieren einer Remote-Gabel

Gabel synchronisieren


Installations- / Bedienungsanleitung:

Öffnen Sie Git Bash (Windows) oder Linux / Mac Terminal

Wenn Sie Ihr Repository noch nicht geklont haben, müssen Sie in das Arbeitsverzeichnis Ihres Entwicklungsordners wechseln und es auf Ihre Workstation klonen.

$ git clone https://github.com/YOUR_USERNAME/YOUR_FORK.git

Wechseln Sie in das Arbeitsverzeichnis Ihres Forked Repo auf Ihrer Workstation.

$ cd /user/development/my_forked_repo/

Listen Sie das aktuell konfigurierte Remote-Repository für Ihren Fork auf.

 $ git remote -v

origin  https://github.com/YOUR_USERNAME/YOUR_FORK.git (fetch)
origin  https://github.com/YOUR_USERNAME/YOUR_FORK.git (push)

Geben Sie ein neues Remote-Upstream-Repository an, das mit dem Zweig synchronisiert werden soll.

$ git remote add upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git

Überprüfen Sie das neue Upstream-Repository, das Sie für Ihren Fork angegeben haben.

$ git remote -v

origin    https://github.com/YOUR_USERNAME/YOUR_FORK.git (fetch)
origin    https://github.com/YOUR_USERNAME/YOUR_FORK.git (push)
upstream  https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git (fetch)
upstream  https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git (push)

Rufen Sie die Zweige und ihre jeweiligen Commits aus dem Upstream-Repository ab. Commits zum Master werden in einer lokalen Filiale, Upstream / Master, gespeichert.

$ git fetch upstream

remote: Counting objects: 75, done.
remote: Compressing objects: 100% (53/53), done.
remote: Total 62 (delta 27), reused 44 (delta 9)
Unpacking objects: 100% (62/62), done.
From https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY
 * [new branch]      master     -> upstream/master

Überprüfen Sie die lokale Hauptniederlassung Ihrer Gabel.

$ git checkout master

Switched to branch 'master'

Führen Sie die Änderungen von Upstream / Master in Ihrer lokalen Master-Niederlassung zusammen. Dadurch wird der Master-Zweig Ihrer Gabel mit dem Upstream-Repository synchronisiert, ohne dass Ihre lokalen Änderungen verloren gehen.

$ git merge upstream/master

Updating a422352..5fdff0f
Fast-forward
README                    |    9 -------
README.md                 |    7 ++++++
 2 files changed, 7 insertions(+), 9 deletions(-)
 delete mode 100644 README
 create mode 100644 README.md

Wenn Ihre lokale Niederlassung keine eindeutigen Commits hatte, führt Git stattdessen einen "Schnellvorlauf" durch:

$ git merge upstream/master

Updating 34e91da..16c56ad
Fast-forward
 README.md                 |    5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

Sie müssen nun die Commits an Ihre Gabel drücken.

$ git push

Wenn Sie noch nicht authentifiziert sind, werden Sie zur Eingabe Ihres github-Benutzernamens / -Passworts aufgefordert. Nach der Authentifizierung sollten die neuen Commits an Ihre Gabel geschoben und auf dem Github sichtbar sein.

ode2k
quelle
5
Vielen Dank für Ihre ausführliche Antwort. Die Hoffnung lag jedoch auf einer Lösung über das Webinterface.
Toby Allen