Un remote server est simplement un autre dépôt git avec lequel on communique. On utilise habituellement un de ces dépôts git comme dépôt central, bien que ledit dépôt ne soit pas différent des autres hormis cette décision commune de l'utiliser comme dépôt central.
Exemple
Nous avons un remote server avec un dépôt git vide, et un dépôt git local avec 3 commit. On effectue un push pour mettre nos commit sur le dépôt remote.
master⬎ remote server ━┫01b45a┣╌╌┊41c86b┊ push origin/master⬎ ↟ local ━┫01b45a┣━┫41c86b┣ master⬏
À ce moment git va créér une nouvelle branche sur le dépôt local nommée par convention origin/master. Cette branche référence le dépôt remote et essaie de rester synchronisée avec celui-ci.
Lorsque quelqu'un commit sur le remote dépôt, on peut effectuer un fetch vers origin/master.
fetch est la commande qui permet de synchroniser origin/master avec le dépôt remote.
master⬎ remote server ━┫01b45a┣━┫41c86b┣ ↡ (va déplacer le pointeur) origin/master⬎ fetch (de origin/master ) local ━┫01b45a┣╌╌┊41c86b┊ master⬏
Cette modification n'est cependant pas dans notre master tant que l'on a pas fait un merge.
Pointeurs
dans l'exemple précédent, il n'y a pas deux copies des commits. On utilise les pointeurs. Lorsque l'on commit au delà d'origin/master, on créé un commit sur lequel le pointeur HEAD va se déplacer, tandis que le pointeur correspondant à origin/head reste sur le dernier commit.
Et de même si l'on fait un fetch, le pointeur HEAD ne bouge pas mais celui lié à origin/master va bouger vers le dernier des nouveaux commits récupérés.
master⬎ remote server ━┫01b45a┣━┫41c86b┣━┫41c86b┣ origin/master⬎ local ━┫01b45a┣━┫41c86b┣┳┫41c86b┣ ┗┫67d01f┣ master⬏