Dépôts distants — push, pull, fetch
Module 03 60 min
Objectifs de la section
- Comprendre ce qu'est un dépôt distant
- Configurer et gérer les remotes avec
git remote - Pousser des commits vers GitHub avec
git push - Récupérer des changements avec
git pulletgit fetch - Comprendre la différence entre
fetchetpull
Comprendre les dépôts distants
Un remote est simplement un alias (un raccourci) vers l'URL d'un dépôt hébergé (GitHub, GitLab, etc.).
Gérer les remotes
# Lister les remotes configurés
git remote -v
# origin git@github.com:alice/mon-projet.git (fetch)
# origin git@github.com:alice/mon-projet.git (push)
# Ajouter un remote
git remote add origin git@github.com:alice/mon-projet.git
# Changer l'URL d'un remote
git remote set-url origin git@github.com:alice/nouveau-nom.git
# Supprimer un remote
git remote remove upstream
# Renommer un remote
git remote rename origin github
# Voir les détails d'un remote
git remote show origin
Convention de nommage
| Nom | Convention | Utilisation |
|---|---|---|
origin | Votre fork ou dépôt principal | Le remote par défaut |
upstream | Le dépôt original (open source) | Pour synchroniser avec la source |
git push — Envoyer vos commits
# Pousser la branche actuelle vers origin
git push
# Pousser et définir le tracking upstream (première fois)
git push -u origin main
git push --set-upstream origin main
# Pousser une branche spécifique
git push origin feature/login
# Pousser toutes les branches
git push --all origin
# Pousser les tags
git push --tags
# Forcer le push (DANGER — réécrit l'historique distant)
git push --force
git push --force-with-lease # Plus sûr : vérifie qu'il n'y a pas eu de push entre-temps
Évitez git push --force
--force peut écraser le travail de vos coéquipiers. Utilisez --force-with-lease si vous devez vraiment le faire.
Situations de push rejeté
# Erreur : Updates were rejected because the remote contains work
# Solution : D'abord récupérer les changements distants
git pull --rebase origin main
# Résoudre les conflits si nécessaire
git push origin main
git fetch — Télécharger sans fusionner
# Récupérer tous les changements distants (sans fusionner)
git fetch origin
# Récupérer une branche spécifique
git fetch origin main
# Récupérer depuis tous les remotes
git fetch --all
# Voir ce qui a changé après le fetch
git log HEAD..origin/main --oneline
git diff HEAD origin/main
git fetch est sûr — il télécharge les informations mais ne modifie pas votre répertoire de travail.
git pull — Récupérer ET fusionner
git pull = git fetch + git merge (ou git rebase)
# Pull standard (fetch + merge)
git pull origin main
# Pull avec rebase (historique plus propre)
git pull --rebase origin main
# Pull uniquement si fast-forward possible
git pull --ff-only origin main
fetch vs pull — Quand utiliser quoi ?
| Situation | Recommandation |
|---|---|
| Voir ce qui a changé avant de fusionner | git fetch puis git diff |
| Mettre à jour rapidement votre branche | git pull --rebase |
| Travailler dans une équipe active | git fetch d'abord, inspecter, puis merger |
| Script automatisé | git pull --ff-only (échoue proprement) |
Branches de suivi (Tracking Branches)
# Voir quelles branches locales suivent quelles branches distantes
git branch -vv
# Configurer le tracking manuellement
git branch --set-upstream-to=origin/main main
# Après git push -u, le tracking est automatique
git push -u origin feature/login
# → La branche locale feature/login suit origin/feature/login
Flux de travail typique
# Début de journée : mettre à jour votre branche
git switch main
git pull --rebase origin main
# Travailler sur votre fonctionnalité
git switch -c feature/nouvelle-fonctionnalite
# ... faire des commits ...
# Avant de pousser : se synchroniser avec main
git fetch origin
git rebase origin/main
# Pousser votre branche
git push -u origin feature/nouvelle-fonctionnalite
# Créer une Pull Request
gh pr create --title "Ajout nouvelle fonctionnalité" --base main
Résumé des commandes clés
| Commande | Description |
|---|---|
git remote -v | Lister les remotes |
git remote add origin <url> | Ajouter un remote |
git push -u origin main | Pousser et configurer le tracking |
git push | Pousser vers le remote configuré |
git fetch origin | Télécharger sans fusionner |
git pull --rebase | Récupérer et rebaser |
git pull | Récupérer et fusionner |