git pull¶
Der Befehl vereint die Befehle git fetch und
git merge (bzw. git rebase).
Komplettes Kommando: git pull origin master (Erkl.: wie bei git fetch)
Das Git-Buch versucht diesen Prozess mit der folgenden Skizze deutlich zu machen. Aber…
Hinweis
In dieser Situation gibt es neue Commits auf Remote- und Lokal-Branch!
Der Standard-Pull ist ein klassischer Merge und führt zu:
Git - Pull (Merge)¶
Hinweis: Darstellung aus gitbu.ch (siehe auch Literatur).
Hinweis
Wenn man alleine an Projekten arbeitet, dann wird dieser Vorgang erheblich vereinfacht, da es bei einem Pull aus einem Remote entweder keine Neuerungen oder einfach nur die (von anderen Entwicklungsrechnern) zu aktualisierenden Commits vorzuspulen gilt!
In diesem Beispiel werden die beiden Referenzen origin/master (Remote-Tracking-Branch) und
master (lokaler Branch) nach dem nächsten Veröffentlichen (git push) auf denselben
(letzten) Commit M zeigen.
Bei diesem einfach git pull wird also die Abzweigung C weiter mit gepflegt. Wenn man den Branch sauber in einer Linie von Commits haben möchte, dann könnte man den Pull auch mit einem Rebase (also: Neubau) beauftragen.
Tipp
Vor dem vollständigen Verständnis von Rebase-Techniken und -Problemen und deren Lösungen sollte von diesen git pulls abgesehen werden!
Hier ein Rebase, basierend auf gleicher Ausgangsbasis wie oben:
Git - Pull (Rebase)¶
Hinweis: Darstellung aus gitbu.ch (siehe auch Literatur).
Hierbei ist zu beachten, dass der originale Commit D jetzt als neuer Commit D‘ im Branch zu finden ist! Allerdings handelt es sich ja um unseren eigenen lokalen Commit und dieser war ja noch nicht veröffentlicht.
Solche Rebase-Techniken sind fortgeschrittene Techniken, die auch zum Verschieben von Commits genutzt werden. Die Gedanken (s.o.) zum nachträglichen Anpassen von bereits veröffentlichten Commits sind stets wichtig und zu verinnerlichen.
Hinweis
Die argumentlosen Aufrufe von git fetch, git pull und auch git push
sind vorbehaltlich der Definition von Upstream-Branches (siehe wieder Config). Für
den Fall, dass diese Upstream-Branches nicht definiert sind, kommt es zu Fehlern.