Sur votre Mac, ouvrez le Terminal, accédez au dépôt et exécutez git status -sb. Si la branche actuelle affiche ahead 1 (ou un autre nombre positif) par rapport à son amont, elle contient des commits locaux non représentés par la branche de suivi à distance avec laquelle Git effectue la comparaison. Effectuez d'abord un fetch pour rafraîchir cette comparaison, puis listez les commits spécifiques. Cela vérifie l'historique validé ; les modifications qui n'ont pas fait l'objet d'un commit constituent un type distinct de changement local.
Comparer la branche actuelle à sa branche de suivi distant
Dans le Terminal, déplacez-vous dans le dossier du projet. Vous pouvez taper cd , faire glisser le dossier depuis le Finder dans la fenêtre du Terminal, puis appuyer sur Entrée. Exécutez :
git status -sb
Un résultat tel que ## main...origin/main [ahead 2] signifie que la branche locale main a deux commits d'avance sur son amont configuré, origin/main, d'après le dernier état distant enregistré par Git. [behind 1] signifie que la branche distante suivie contient un commit absent localement. Si les deux nombres apparaissent, les branches ont divergé. La documentation de Git indique que le statut peut afficher les compteurs d'avance et de retard lorsqu'un amont est configuré et disponible pour la comparaison. Documentation sur Git status
Pour obtenir le statut complet, utilisez git status. Il signale également les modifications dans l'arbre de travail et la zone de préparation (staging area). Ces fichiers modifiés ou non suivis ne constituent pas une preuve de commits non poussés : ce ne sont pas encore des commits. Un arbre de travail propre peut tout à fait contenir des commits non poussés, et un arbre de travail modifié peut n'en comporter aucun.
Actualiser la comparaison, puis inspecter les commits
Le nom origin/main est une référence locale de suivi distant ; ce n'est pas une vue en temps réel du serveur. Exécutez une récupération (fetch) pour mettre à jour les références depuis les dépôts distants configurés, puis vérifiez à nouveau le statut :
git fetch
git status -sb
git fetch met à jour les informations de suivi à distance sans fusionner ces modifications récupérées dans votre branche actuelle. Cette commande ne pousse pas les commits locaux. L'opération fetch peut échouer si le dépôt distant est inaccessible ou si l'authentification est indisponible ; dans ce cas, l'ancienne comparaison ne peut pas vous indiquer ce qui se trouve actuellement sur le serveur. Documentation sur Git fetch
Si le statut indique que la branche est en avance et dispose d'un amont, affichez les commits qui sont accessibles depuis votre branche actuelle mais pas depuis cet amont :
git log --oneline '@{u}..HEAD'
Chaque ligne de sortie correspond à un commit ; le premier est le plus récent de l'intervalle. Un résultat vide signifie que Git n'a trouvé aucun commit dans cet intervalle. La notation raccourcie @{u} désigne l'amont configuré de la branche actuelle, et l'intervalle avec deux points sélectionne les commits accessibles depuis HEAD mais pas depuis l'amont. Documentation sur les révisions Git
Par exemple, si le statut indique [ahead 2] et que le journal liste deux objets de commit, il s'agit des commits localement en avance par rapport à la branche suivie. C'est une confirmation utile avant de décider si vous avez l'intention de les pousser. Cela n'envoie rien en soi.
Si Git ne peut pas comparer la branche
Si git status -sb n'affiche aucun compteur d'avance/retard, la branche n'a peut-être pas d'amont configuré. Exécutez :
git branch -vv
La branche actuelle est marquée d'un * ; le texte entre crochets, lorsqu'il est présent, identifie son amont et les compteurs de divergence. Si aucun amont n'apparaît, Git ne dispose pas de la référence de suivi habituelle pour cette comparaison. git remote -v peut afficher les noms et les URL des dépôts distants configurés, mais cela n'établit pas quelle branche distante est la destination prévue. La documentation de Git précise que les branches amont sont des paramètres de branche facultatifs utilisés par des commandes telles que status. Documentation sur Git pull
Évitez de deviner origin/main : votre branche pourrait suivre une branche portant un nom différent ou un dépôt distant distinct. Si vous connaissez la branche distante visée, comparez explicitement après avoir effectué un fetch, en remplaçant origin/main par son nom réel :
git log --oneline origin/main..HEAD
Cela liste les commits présents dans votre HEAD actuel mais absents de cette référence. Si la destination est incertaine, inspectez la configuration de la branche et du dépôt distant avant de considérer le résultat comme un aperçu de push. Git permet à la destination de push configurée d'être différente de l'amont utilisé pour la comparaison. Documentation sur les révisions Git
Ce que cette vérification établit et n'établit pas
La comparaison n'est à jour que dans la mesure du dernier fetch réussi. Une autre personne pourrait pousser de nouveaux commits après votre fetch, ou le serveur pourrait être modifié avant votre push. Un fetch réussi donne à Git une référence plus récente ; il ne garantit pas qu'un push ultérieur réussira. De même, un commit absent de origin/main n'est pas nécessairement absent de tous les dépôts distants ou de toutes les branches.
Lorsque vous avez confirmé la destination prévue et que vous souhaitez envoyer les commits, utilisez la commande push appropriée à la configuration des branches et des dépôts distants de votre projet. Si Git indique qu'aucun amont n'est configuré, il peut nécessiter la spécification explicite d'un dépôt distant et d'une branche ; vérifiez attentivement la destination avant de pousser. Les étapes ci-dessus identifient l'historique local par rapport à l'historique suivi afin que vous puissiez prendre cette décision sans confondre les modifications de fichiers non commitées avec des commits.