Versioning avec Git & GitHub · Étape 16

Comprends remote, fetch, pull, push et upstream

Relie un dépôt local à un dépôt distant, distingue les références locales des références distantes et synchronise sans fusion implicite incontrôlée.

Durée indicative · ~1 h 30Niveau intermédiairePrérequis conseillé · Leçon 15 — stratégie de branches d’équipePratique · TP
L’idée reçue

« origin est forcément GitHub et pull met simplement mon dossier à jour. »

origin n’est qu’un nom local. pull télécharge puis intègre ; il peut donc modifier le graphe et provoquer un conflit.

01Construis le modèle mental

Dépôt local
├── main
├── feature/backup-healthcheck
└── origin/main                 référence locale du dernier état observé

Dépôt distant nommé origin
├── main
└── feature/backup-healthcheck

origin/main n’est pas une connexion permanente. Cette référence avance lorsque tu exécutes fetch, pull ou certaines opérations de push.

02Observe le remote du laboratoire

bash module4-github-collaboration.sh setup \
  /tmp/soria-git-github-$USER

cd /tmp/soria-git-github-$USER/alice
git remote -v
git remote get-url origin
git branch -a
git log --oneline --decorate --graph --all

Le remote pointe vers un dépôt bare local. Le transport change, mais les concepts sont les mêmes qu’avec une URL HTTPS ou SSH.

03Fetch : télécharge sans intégrer

git fetch --prune origin
git branch -r
git log --oneline main..origin/main
git diff --stat main...origin/main

fetch met à jour les références distantes observées. Il ne déplace pas automatiquement ta branche courante.

04Pull : fetch puis intégration

git config pull.ff only
git pull --ff-only origin main

Avec –ff-only, pull refuse de créer un merge commit si la branche locale et la branche distante ont divergé. Tu obtiens un arrêt explicite au lieu d’une décision implicite.

Commande
Télécharge
Modifie la branche courante
git fetch
oui
non
git pull –ff-only
oui
oui, seulement si fast-forward
git push
non
modifie le remote si autorisé

05Publie une branche avec son upstream

git switch -c feature/backup-healthcheck
# crée puis committe une modification
git push -u origin feature/backup-healthcheck

git branch -vv
git rev-parse --abbrev-ref '@{upstream}'

L’option -u associe la branche locale à sa branche de suivi. Les prochains git push et git pull savent quelle destination utiliser.

06Compare avant d’intégrer

git fetch origin
git status --short --branch
git log --left-right --graph --oneline HEAD...@{upstream}
git diff --stat HEAD...@{upstream}

Ne traite pas « behind » comme une instruction automatique. Observe les commits, le diff et la branche cible avant de choisir merge, rebase ou fast-forward.

07Comprends origin et upstream dans un fork

origin    ton fork, généralement accessible en écriture
upstream  dépôt source, souvent lu pour rester synchronisé
git remote add upstream https://github.com/OWNER/REPOSITORY.git
git fetch upstream
git remote -v

Le nom upstream est une convention de remote. Il ne faut pas le confondre avec l’upstream d’une branche configuré par git push -u.

08Diagnostique une synchronisation

git remote show origin
git config --get-regexp '^remote\.|^branch\.'
git ls-remote --heads origin
git branch -vv
git status --short --branch
Mission

Explique le trajet d’un commit

À partir du lab, suis un commit depuis la branche d’Alice jusqu’au bare remote, puis jusqu’au clone de Bob. Fournis les SHA observés avant et après fetch, push et pull.

À retenir

Fetch observe, pull observe puis intègre, push publie. Une branche distante suivie n’est qu’une référence locale mise à jour par les échanges avec le remote.

Ta progression

Chargement de l’état… Se connecter pour synchroniser.