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