Ce que le statut vous dit, c'est que vous êtes derrière l'arbitre appelé, origin/master
qui est un arbitre local dans votre référentiel local . Dans ce cas, cette référence arrive à suivre une branche dans une télécommande, appelée origin
, mais l'état ne vous dit rien sur la branche sur la télécommande. Il vous parle de la référence, qui n'est qu'un ID de validation stocké sur votre système de fichiers local (dans ce cas, il se trouve généralement dans un fichier appelé .git/refs/remotes/origin/master
dans votre référentiel local).
git pull
fait deux opérations; tout d'abord, il effectue une git fetch
mise à jour des validations dans le référentiel distant (qui met à jour la origin/master
référence dans votre référentiel local), puis il git merge
fusionne ces validations dans la branche actuelle.
Tant que vous ne faites fetch
pas l' étape (seule ou via git pull
), votre référentiel local n'a aucun moyen de savoir qu'il y a des commits supplémentaires en amont et git status
ne regarde que votre origin/master
référence locale .
Quand git status
dit à jour, cela signifie "à jour avec la branche que la branche actuelle suit", ce qui signifie dans ce cas "à jour avec la référence locale appelée origin/master
". Cela équivaut seulement à "à jour avec le statut en amont qui a été récupéré la dernière fois que nous avons fait un fetch
" qui n'est pas la même chose que "à jour avec le dernier statut en direct de l'amont".
Pourquoi ça marche comme ça? Eh bien, l' fetch
étape est une opération réseau potentiellement lente et coûteuse. La conception de Git (et d'autres systèmes de contrôle de version distribués ) vise à éviter les opérations réseau lorsque cela n'est pas nécessaire, et est un modèle complètement différent du système client-serveur typique auquel de nombreuses personnes sont habituées (bien que, comme indiqué dans les commentaires ci-dessous, le concept de Git d'une "branche de suivi à distance" qui provoque ici une confusion n'est pas partagée par tous les DVCS). Il est tout à fait possible d'utiliser Git hors ligne, sans connexion à un serveur centralisé, et la sortie de git status
reflète cela.
La création et la commutation de branches (et la vérification de leur état) dans Git est censée être légère, pas quelque chose qui effectue une opération réseau lente vers un système centralisé. L'hypothèse lors de la conception de Git et de la git status
sortie était que les utilisateurs le comprennent (trop de fonctionnalités Git n'ont de sens que si vous savez déjà comment Git fonctionne). Avec l'adoption de Git par de nombreux utilisateurs qui ne connaissent pas le DVCS, cette hypothèse n'est pas toujours valable.