Mein Verständnis war immer, dass git pull
im Wesentlichen eine Kombination von git fetch
und git merge ...
ist, aber ich habe es schon einige Male erlebt, wo ziehen, dann vergleichen zeigt Änderungen, die nicht meine sind, bis ich auch a mache fetch:
(auf Zweigblob):
%Vor%Ist mein Verständnis von Zug falsch?
Dies ist eine häufige Quelle der Verwirrung, so sehr, dass der #git
IRC-Kanal einen vordefinierten Hilfstext dafür hat, genannt !pull4
:
Wir empfehlen, 'git fetch / pull & lt; remote & gt; & lt; refspec & gt; ' (d. h. mit Verzweigungsargument), weil es den & lt; remote & gt; / & lt; Zweig & gt; nicht aktualisiert; ref. Der einfache Weg, Dinge richtig zu holen, ist, alles zu bekommen: 'git fetch' oder 'git pull' sind ausreichend, wenn Sie eine Fernbedienung haben; Ansonsten empfehlen wir 'git fetch & lt; remote & gt;' (plus 'git merge & lt; remote & gt; / & lt; branch & gt;', wenn du ziehen / zusammenführen willst).
Was hier passiert ist, dass git pull
ohne Argumente ein git fetch
auf dem "Standard-Remote" (normalerweise origin
), dann git merge
s der Remote-Zweig, der Ihrem aktuellen lokalen Zweig entspricht. git pull <remote>
macht dasselbe mit einer explizit angegebenen Fernbedienung. Der "Vier-Wort-Pull", git pull <remote> <branch>
, ruft jedoch die Verzweigung in einen temporären Speicherort ab, FETCH_HEAD
, ohne aktualisiert Ihre Tracking-Zweige und führt dann FETCH_HEAD
in Ihre aktuelle Verzweigung zusammen.
Wenn Sie also git pull origin blob
verwenden, sagen Sie "Ich möchte die neueste Version des blob
-Verzweigs in der entfernten origin
in meinen aktuellen Zweig einbinden, ohne einen meiner Verfolgungszweige zu aktualisieren oder einen anderen zu holen Daten ".
Wenn Ihre Filialzusammenführungskonfigurationen korrekt sind (und das sind sie wahrscheinlich, da git clone
und git checkout
versuchen, sie automatisch einzurichten), können Sie einfach git pull
oder git pull origin
und es wird alles abholen und dann füge den Zweig ein, der deinem aktuell ausgecheckten Zweig entspricht. Wenn Sie eine explizitere Kontrolle wünschen, verwenden Sie git fetch
und dann git merge
. git pull <remote> <branch>
ist selten was du willst.
(Der Grund dafür, dass git fetch
die Dinge in Ihrem Beispiel korrigiert, ist, dass Ihr lokaler Zweig nach dem Pull mit den letzten Remote-Commits aktualisiert wurde, der Tracking-Zweig jedoch nicht. git fetch
aktualisiert den Tracking-Zweig mit diesen Commits, an denen die Diffs wieder Sinn machen.)