Branches Distantes dans Git
Table des matières
- Comprendre les branches distantes
- Voir les branches distantes
- Tracking branches
- Travailler avec les remote branches
- Supprimer des branches distantes
- Scénarios courants
1 - Comprendre les branches distantes
Trois types de branches
| Type | Exemple | Description |
|---|---|---|
| Locale | main | Sur votre machine |
| Remote-tracking | origin/main | Copie locale de l'état distant |
| Remote | Sur GitHub | Sur le serveur |
Visualisation
Votre machine GitHub
───────────── ──────
main main
│ │
│ origin/main │
│ │ │
└────────┘───────────────────────┘
↑ ↑
git fetch git push
origin/main vs main
main: Votre branche localeorigin/main: Dernière version connue de la branche main sur GitHub
Après un git fetch, origin/main est mis à jour mais pas main.
🔝 Retour à la table des matières
2 - Voir les branches distantes
Lister les branches
# Branches locales
git branch
# Branches distantes
git branch -r
# Toutes les branches
git branch -a
Exemple de sortie
$ git branch -a
* main
feature/login
remotes/origin/main
remotes/origin/develop
remotes/origin/feature/api
Voir les détails d'un remote
git remote show origin
Affiche :
- URL du remote
- Branches trackées
- Branches locales configurées pour push/pull
- Branches distantes supprimées
Mettre à jour la liste des branches distantes
# Récupérer les nouvelles branches
git fetch origin
# Supprimer les références aux branches supprimées
git fetch --prune
# ou
git remote prune origin
🔝 Retour à la table des matières
3 - Tracking branches
Qu'est-ce qu'une tracking branch ?
Une branche locale qui "suit" une branche distante.
# Voir les branches avec leur tracking
git branch -vv
Résultat :
* main abc1234 [origin/main] Dernier commit
feature/login def5678 [origin/feature/login: ahead 2] WIP
Configurer le tracking
# Lors de la création
git checkout -b feature/new origin/feature/new
# Ou après
git branch --set-upstream-to=origin/feature/new feature/new
git branch -u origin/feature/new # raccourci
Premier push avec tracking
git push -u origin feature/new
# Équivalent à
git push --set-upstream origin feature/new
Avantages du tracking
# Sans tracking
git pull origin main
git push origin main
# Avec tracking
git pull
git push
🔝 Retour à la table des matières
4 - Travailler avec les remote branches
Récupérer une branche distante
# Méthode 1 : Checkout direct (crée une tracking branch)
git checkout feature/api
# Git détecte origin/feature/api et crée une branche locale
# Méthode 2 : Explicite
git checkout -b feature/api origin/feature/api
# Méthode 3 : Fetch puis checkout
git fetch origin feature/api
git checkout feature/api
Voir les différences avec le remote
# Commits locaux non poussés
git log origin/main..main
# Commits distants non récupérés
git log main..origin/main
# Après un fetch
git diff main origin/main
Ahead / Behind
git status
# Your branch is ahead of 'origin/main' by 2 commits.
# Your branch is behind 'origin/main' by 3 commits.
| Status | Signification | Action |
|---|---|---|
| ahead | Commits locaux à pousser | git push |
| behind | Commits distants à récupérer | git pull |
| diverged | Les deux | git pull puis git push |
🔝 Retour à la table des matières
5 - Supprimer des branches distantes
Supprimer sur le remote
git push origin --delete feature/old
# ou
git push origin :feature/old
Nettoyer les références locales
Après suppression sur GitHub, les références origin/... restent localement :
# Supprimer les références obsolètes
git fetch --prune
# Ou configurer pour toujours pruner
git config --global fetch.prune true
Supprimer une branche locale et distante
# 1. Supprimer localement
git branch -d feature/done
# 2. Supprimer sur le remote
git push origin --delete feature/done
Script de nettoyage
# Supprimer toutes les branches mergées (sauf main)
git branch --merged | grep -v "main" | xargs git branch -d
# Nettoyer les remote-tracking obsolètes
git remote prune origin
🔝 Retour à la table des matières
6 - Scénarios courants
Scénario 1 : Collègue a créé une nouvelle branche
# 1. Récupérer les branches
git fetch origin
# 2. Voir les nouvelles branches
git branch -r
# 3. Checkout la branche
git checkout feature/colleague-feature
Scénario 2 : Votre branche est en retard
$ git status
Your branch is behind 'origin/main' by 5 commits.
# Solution
git pull origin main
Scénario 3 : Branches divergentes
$ git status
Your branch and 'origin/main' have diverged.
# Solution 1 : Merge
git pull origin main
# Solution 2 : Rebase
git pull --rebase origin main
Scénario 4 : Branche supprimée sur GitHub mais visible localement
# Les anciennes références traînent
git branch -r
# origin/feature/old-deleted
# Nettoyer
git fetch --prune
Résumé des commandes
| Commande | Description |
|---|---|
git branch -r | Lister les branches distantes |
git fetch origin | Mettre à jour les références |
git fetch --prune | Nettoyer les branches supprimées |
git checkout -b local origin/remote | Créer une tracking branch |
git push origin --delete branch | Supprimer une branche distante |
git branch -vv | Voir le tracking des branches |