Github Fork mit Haupt-Repository in Sync halten

Wenn du deinen Fork über längere Zeit aus den Augen gelassen hast und nun wieder etwas contributen möchtest, muss dein Fork zuerst wieder auf den Stand des Haupt-Repository gebracht werden.

In diesem Tipp zeige ich am Beispiel vom Repository openhsr/www.openhsr.ch, wie du deinen Fork in Sync halten kannst.

Zuerst muss du deinen Fork lokal auschecken. Falls du dies bereits erledigt hast, musst du einzig in das Projektverzeichnis deines Forks wechseln.

$ git clone https://github.com/dein-git-user/www.openhsr.ch.git
$ cd www.openhsr.ch

Nun muss das Haupt-Repository als upstream Remote eingerichtet werden. Wir prüfen zuerst ob dieses nicht bereits existiert.

$ git remote -v
origin  https://github.com/dein-git-user/www.openhsr.ch.git (fetch)
origin  https://github.com/dein-git-user/www.openhsr.ch.git (push)

Der neue upstream Remote wird wie folgt hinzugefügt.

$ git remote add upstream https://github.com/openhsr/www.openhsr.ch

Nun sollten zwei Remotes zur Verfügung stehen, die wir im Folgenden abgleichen möchten.

$ git remote -v
origin  https://github.com/dein-git-user/www.openhsr.ch.git (fetch)
origin  https://github.com/dein-git-user/www.openhsr.ch.git (push)
upstream    https://github.com/openhsr/www.openhsr.ch (fetch)
upstream    https://github.com/openhsr/www.openhsr.ch (push)

Dazu laden wir uns alle Änderungen vom Upstream...

$ 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/openhsr/www.openhsr.ch
 * [new branch]      master     -> upstream/master

... und mergen den Upstream in den aktuellen Branch

$ git checkout <dein_entwicklungs_branch>
$ git merge upstream/master

Nun sind alle Änderungen des upstream Repository in deinem lokalen Fork. Diese wollen wir nun noch in dein origin Repository pushen. Falls lokale Konflikte existieren, müssen diese wie gewohnt behoben und dann gestashed und commited werden. Diesen Schritt kannst du auslassen, wenn keine Konflike existieren. Anschliessend pushen wir die lokalen Änderungen in das Remote Repository auf Github.

# optional
$ git add .
$ git commit -m "fork synced with upstream"
# mandatory
$ git push origin master