« 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.
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
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.