GIT bietet nicht nur Funktionalitäten für ein lokales Repository an, sondern ebenso für ein „remote Repository“.
Wie der Name schon verrät handelt es sich im Prinzip um das gleiche Repository wie es lokal vorhanden ist, nur ist es auf einem anderen (über ein Netzwerk erreichbaren) Rechner vorhanden.
Hier gibt es extra Befehle um einerseits den aktuellen Stand vom lokalen Repository in das remote Repository zu „schieben“ (push) und natürlich auch in die andere Richtung den aktuellen Stand vom remote Repository in das lokale Repository zu „ziehen“ (pull).
Hier eine schöne Illustration in welchen unterschiedlichen Zuständen sich ein Repository befinden kann und durch welche Befehle diese hervorgerufen werden.
Hier ist aber wichtig anzumerken, dass sowohl git push als auch git pull nur für den aktuell aktiven Branch wirksam ist, nicht für alle lokal vorhandenen Branches!
D.h. man sieht vielleicht beim git pull, dass sich etwas in anderen Branches geändert hat, diese Änderungen werden aber nicht in die anderen Branches automatisch gemerged sondern nur über git fetch heruntgeladen.
Ein git pull führt also im Hintergrund nur ein git fetch gefolgt von einem git merge aus.
Das git fetch verursacht, dass die „Remote“ Repositories mit den Local Repositories synchronisiert werden aber hier werden noch keinen „wirklichen“ Datei Änderungen durchgeführt.
Erst mit dem git merge werden die nun neuen Änderungen aus dem Local Repository in die Dateien übernommen.