Comment vérifier si un dépôt Git est synchronisé avec le dépôt distant

GitGitBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire (lab), vous apprendrez à vérifier si votre dépôt Git local est synchronisé avec son équivalent distant. Nous explorerons des méthodes pratiques pour déterminer si votre branche locale est à jour, en retard ou en avance par rapport à la branche distante.

Le laboratoire vous guidera tout au long de la récupération (fetch) des modifications depuis un dépôt distant et de l'utilisation de git status pour évaluer l'état de synchronisation. Vous apprendrez également à utiliser git log pour comparer votre HEAD local avec la branche de suivi distante (@{u}) afin d'identifier les différences dans l'historique des commits. Enfin, nous simulerons et examinerons l'état de dépôts qui ont divergé, offrant ainsi une compréhension complète de la façon d'identifier et de gérer les problèmes de synchronisation dans Git.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/BasicOperationsGroup(["Basic Operations"]) git(("Git")) -.-> git/BranchManagementGroup(["Branch Management"]) git(("Git")) -.-> git/CollaborationandSharingGroup(["Collaboration and Sharing"]) git/BasicOperationsGroup -.-> git/add("Stage Files") git/BasicOperationsGroup -.-> git/status("Check Status") git/BasicOperationsGroup -.-> git/commit("Create Commit") git/BranchManagementGroup -.-> git/log("Show Commits") git/CollaborationandSharingGroup -.-> git/fetch("Download Updates") subgraph Lab Skills git/add -.-> lab-560100{{"Comment vérifier si un dépôt Git est synchronisé avec le dépôt distant"}} git/status -.-> lab-560100{{"Comment vérifier si un dépôt Git est synchronisé avec le dépôt distant"}} git/commit -.-> lab-560100{{"Comment vérifier si un dépôt Git est synchronisé avec le dépôt distant"}} git/log -.-> lab-560100{{"Comment vérifier si un dépôt Git est synchronisé avec le dépôt distant"}} git/fetch -.-> lab-560100{{"Comment vérifier si un dépôt Git est synchronisé avec le dépôt distant"}} end

Récupérer (Fetch) et vérifier l'état de Git

Dans cette étape, nous apprendrons à récupérer les modifications depuis un dépôt distant et à vérifier l'état de notre dépôt local.

Imaginez que vous travaillez sur un projet avec d'autres personnes. Elles pourraient apporter des modifications au projet et les enregistrer dans un emplacement central (un dépôt distant). Vous avez besoin d'un moyen d'intégrer ces modifications dans votre propre copie du projet (votre dépôt local). C'est là que git fetch entre en jeu.

Tout d'abord, assurons - nous que nous sommes dans le répertoire de notre projet. Ouvrez votre terminal et tapez :

cd ~/project/my-time-machine

Maintenant, simulons avoir un dépôt distant. Dans un scénario réel, celui - ci serait hébergé sur une plateforme comme GitHub ou GitLab. Pour ce laboratoire (lab), nous utiliserons un répertoire local comme notre "dépôt distant".

git remote add origin ../my-time-machine-remote

Cette commande ajoute un "dépôt distant" nommé origin qui pointe vers un répertoire en dehors de notre projet actuel.

Maintenant, utilisons git fetch pour récupérer toutes les modifications de ce dépôt distant simulé.

git fetch origin

Vous pourriez ne pas voir beaucoup de sortie si il n'y a pas de nouvelles modifications, mais cette commande a contacté le dépôt distant et a téléchargé toute nouvelle information, comme les commits et les branches, sans les fusionner dans votre branche actuelle.

Après avoir récupéré les modifications, il est toujours une bonne idée de vérifier l'état de votre dépôt local pour voir s'il y a des modifications provenant du dépôt distant que vous n'avez pas encore intégrées.

git status

La sortie de git status vous indiquera maintenant si votre branche locale est "à jour" par rapport à la branche distante, ou s'il y a des modifications disponibles à récupérer (pull). Par exemple, vous pourriez voir quelque chose comme :

On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean

Ou, si il y avait des modifications sur le dépôt distant :

On branch master
Your branch is behind 'origin/master' by 1 commit, and can be fast - forwarded.
  (use "git pull" to update your local branch)

nothing to commit, working tree clean

Comprendre la sortie de git status après un git fetch est crucial. Elle vous indique la relation entre votre branche locale et la branche correspondante sur le dépôt distant. Cela vous aide à décider si vous devez récupérer (pull) les modifications ou si votre copie locale est déjà à jour.

Utiliser git log pour comparer HEAD et @{u}

Dans cette étape, nous utiliserons la commande git log pour comparer l'état de notre branche locale (HEAD) avec sa branche en amont (@{u}). C'est un moyen puissant de visualiser les différences après avoir récupéré (fetch) les modifications.

Tout d'abord, assurez - vous que vous êtes dans le répertoire de votre projet :

cd ~/project/my-time-machine

Dans Git, HEAD fait référence au commit vers lequel votre branche actuelle pointe. Il représente la fin de votre travail actuel. @{u} (ou @\{upstream\}) fait référence à la branche en amont que votre branche locale actuelle suit. Il s'agit généralement de la branche correspondante sur le dépôt distant depuis lequel vous avez récupéré les modifications.

Pour voir les commits qui sont dans votre branche locale (HEAD) mais pas dans la branche en amont (@{u}), vous pouvez utiliser la commande suivante :

git log HEAD..@{u}

Cette commande affiche les commits qui sont accessibles depuis @{u} mais pas depuis HEAD. En d'autres termes, elle affiche les commits qui sont sur la branche distante mais pas encore sur votre branche locale. Si il n'y a pas de tels commits (ce qui signifie que votre branche locale est à jour ou en avance), cette commande ne produira aucune sortie.

Maintenant, voyons les commits qui sont dans la branche en amont (@{u}) mais pas dans votre branche locale (HEAD). Cela montre les commits qui sont sur votre branche locale mais qui n'ont pas encore été poussés (push) vers le dépôt distant.

git log @{u}..HEAD

Cette commande affiche les commits qui sont accessibles depuis HEAD mais pas depuis @{u}. Si il n'y a pas de tels commits (ce qui signifie que votre branche locale est à jour ou en retard), cette commande ne produira aucune sortie.

En utilisant git log avec la notation .., vous pouvez facilement comparer l'historique de deux points différents dans votre dépôt, comme votre branche locale et son équivalent en amont. Cela est incroyablement utile pour comprendre l'état de votre dépôt par rapport au dépôt distant et pour vous préparer à récupérer (pull) ou pousser (push) des modifications.

Tester des dépôts divergents

Dans cette étape, nous allons simuler un scénario où à la fois votre dépôt local et le dépôt distant ont de nouveaux commits que l'autre n'a pas. Cela est connu sous le nom d'état de "divergence".

Tout d'abord, assurez-vous que vous êtes dans le répertoire de votre projet :

cd ~/project/my-time-machine

Créons un nouveau commit dans notre dépôt local :

echo "Adding a local change" > local_change.txt
git add local_change.txt
git commit -m "Add a local change"

Maintenant, simulons un commit effectué directement dans le dépôt "distant". Nous allons basculer vers le répertoire distant, effectuer un commit, puis revenir.

cd ../my-time-machine-remote
echo "Adding a remote change" > remote_change.txt
git add remote_change.txt
git commit -m "Add a remote change"
cd ../my-time-machine

Nous avons maintenant créé un commit dans notre dépôt local et un commit distinct dans le dépôt distant simulé. Nos dépôts sont maintenant divergents.

Utilisons de nouveau git fetch pour mettre à jour notre connaissance du dépôt distant :

git fetch origin

Maintenant, vérifiez l'état de votre dépôt local :

git status

Vous devriez voir une sortie indiquant que votre branche a divergé. Quelque chose comme ceci :

On branch master
Your branch and 'origin/master' have diverged,
and have 1 and 1 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)

nothing to commit, working tree clean

Ce message d'état vous indique que votre branche locale (master) et la branche de suivi distante (origin/master) se sont toutes deux avancées avec de nouveaux commits depuis la dernière fois qu'elles étaient synchronisées. Il suggère même d'utiliser git pull pour fusionner les modifications distantes.

Comprendre l'état de divergence est important car c'est un scénario courant lorsque vous collaborez avec d'autres personnes. Cela signifie que vous devez intégrer les modifications distantes dans votre branche locale avant de pouvoir pousser vos propres modifications.

Résumé

Dans ce laboratoire (lab), nous avons appris à vérifier si un dépôt Git local est synchronisé avec son équivalent distant. Nous avons commencé par simuler un dépôt distant et l'ajouter à notre projet local en utilisant git remote add. L'étape cruciale de récupération (fetch) des modifications depuis le dépôt distant sans les fusionner a été effectuée en utilisant git fetch origin. Après la récupération, nous avons utilisé git status pour déterminer l'état de synchronisation de notre branche locale par rapport à la branche distante, en observant une sortie indiquant si la branche est à jour ou en retard.

Nous explorerons en outre des méthodes pour comparer le HEAD local avec la branche de suivi distante en utilisant git log et examiner des scénarios impliquant des dépôts divergents pour obtenir une compréhension complète de la synchronisation des dépôts.