2016-11-15 4 views
0

Die Dokumentation unter Github-Help: Syncing a Fork zeigt drei Befehle, um meine GitHub-Gabel mit dem Upstream-Repo zu synchronisieren.Synchronisieren von Fork mit Upstream: Git fetch + Git Kasse + Git Merge vs. Git Kasse + Git Ziehen

git fetch upstream 
git checkout master 
git merge upstream/master 

Kann ich die folgenden zwei Befehle anstelle der oben genannten drei verwenden?

Sind die beiden Befehlssätze äquivalent, oder gibt es Unterschiede zwischen ihnen?

+0

Mögliche Duplikat [In git wie wird holen anders als ziehen und wie als rebase merge anders?] (http://stackoverflow.com/ques/14894768/in-git-how-is-fetch-different-als-pull-and-how-is-merge-different-als-rebase) –

+0

'git pull' =' git fetch' + 'git merge', zumindest allgemein –

+0

FYI: 'git pull upstream/master' ist falsch, da das dritte Wort (' upstream/master') der Name der * remote * sein muss, während 'upstream/master' der Name eines * ist Remote-Tracking-Zweig *. Git verwendet leider sehr ähnliche Wörter, die sehr unterschiedliche (wenn auch verwandte) Dinge bedeuten: Das Wort * branch * hat mindestens zwei Bedeutungen, das Wort * remote * an sich hat eine Bedeutung, und der Ausdruck * remote-tracking branch * hat noch einen anderen . – torek

Antwort

0

Diese Befehlssätze sind nicht gleichwertig.

git pull 

in zwei Befehle aufgeteilt:

git fetch 
git merge 

Das Problem ist, dass git holen erfordert eine Remote-Referenz, während git merge eine Trackingreferenz erfordert, ist der Grund, warum die Github Hilfeseite hat:

git fetch upstream 

aber es hat

git merge upstream/master 

Der Zusammenführungsbefehl nimmt den Zweig upstream/master und führt ihn in den aktuell ausgecheckten Zweig (in diesem Fall 'Master') zusammen. Aber das holt Befehl nicht auf einem Zweig funktioniert, bedarf es eine Fernbedienung, so dass, wenn Sie versuchen:

git pull upstream/master 

Git teilt dies in:

git fetch upstream/master 
git merge upstream/master 

, die auf dem Abruf fehl:

$ git pull upstream/master 
fatal: 'upstream/master' does not appear to be a git repository 
fatal: Could not read from remote repository. 

Please make sure you have the correct access rights 
and the repository exists. 
+0

** Hinweis **: 'git pull upstream/master' funktioniert, wenn Sie 'git fetch upstream' mindestens einmal ausgeführt haben:' upstream/master' verweist auf die lokale Kopie der entfernten Verzweigung, nicht auf die Kopie auf dem entfernten Server. –

+0

@FabienBouleau Das ist auf meinem System nicht korrekt. Sowohl ein Fetch als auch ein Pull scheitern bei Verwendung von 'upstream/master', selbst wenn es bereits vorhanden ist. Fetch benötigt eine Remote-Referenz, keine Verzweigungsreferenz.Vielleicht, wenn Sie den Namen "upstream/master" als Remote mit dem gleichen URL/Ordner wie "upstream" oder mit einigen anderen Konfigurationsänderungen hinzugefügt haben, aber nicht standardmäßig, wenn upstream die sekundäre Remote ist (dh der Ursprung wird hinzugefügt zuerst). – LightCC

+0

Mein Fehler, die Schreibweise 'upstream/master' ist in diesem Fall falsch. Es muss "git pull upstream master" oder "git fetch upstream master" sein. Und wenn Sie das Remote-Repository zum ersten Mal herunterladen, muss es 'git fetch upstream' sein (ohne' master') oder die Remote-Tracking-Filialinformationen werden nicht gesetzt (nur 'FETCH_HEAD'). Verwenden Sie 'upstream/master' nur, um auf den Zweig der Remote-Verfolgung zu verweisen, sobald dieser existiert. –