Aller au contenu principal

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 pull et git fetch
  • Comprendre la différence entre fetch et pull

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​

NomConventionUtilisation
originVotre fork ou dépôt principalLe remote par défaut
upstreamLe 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 ?​

SituationRecommandation
Voir ce qui a changé avant de fusionnergit fetch puis git diff
Mettre à jour rapidement votre branchegit pull --rebase
Travailler dans une équipe activegit 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​

CommandeDescription
git remote -vLister les remotes
git remote add origin <url>Ajouter un remote
git push -u origin mainPousser et configurer le tracking
git pushPousser vers le remote configuré
git fetch originTélécharger sans fusionner
git pull --rebaseRécupérer et rebaser
git pullRécupérer et fusionner

Prochaines étapes​