Travailler avec les branches
Une branche est une ligne de développement indépendante qui permet de travailler sur différentes fonctionnalités en parallèle sans affecter le code principal.
Progression
6 / 8
Derniere mise a jour
27 nov. 2025
Etat
Nouveau
Qu'est-ce qu'une branche ?
Une branche est une ligne de développement indépendante qui permet de travailler sur différentes fonctionnalités en parallèle sans affecter le code principal.
main: A --- B --- C --- F --- G
\ /
feature: D ----- E
Avantages des branches :
- Isoler les nouvelles fonctionnalités
- Expérimenter sans risque
- Travailler en équipe sans conflit
- Faciliter les revues de code
Lister les branches
git branch
Affiche toutes les branches locales.
# Lister les branches locales
git branch
# Lister toutes les branches (locales + distantes)
git branch -a
# Lister les branches distantes uniquement
git branch -rExemple de sortie :
feature/login
* main
bugfix/header
L'astérisque * indique la branche active (où pointe HEAD).
Créer une nouvelle branche
git branch <nom>
# Créer une nouvelle branche
git branch feature/nouvelle-fonctionnalité
# Créer une branche à partir d'un commit spécifique
git branch hotfix a3f5b21Exemples :
feature/user-authenticationbugfix/fix-login-errorrefactor/improve-database-queries
Changer de branche
git checkout / git switch
Méthode moderne (recommandée depuis Git 2.23) :
git switch nom-brancheMéthode classique :
git checkout nom-brancheCréer et basculer en une seule commande :
# Moderne
git switch -c feature/nouvelle-branche
# Classique
git checkout -b feature/nouvelle-brancheExemple pratique : créer une fonctionnalité
Workflow complet pour développer une nouvelle feature :
# 1. S'assurer d'être sur main et à jour
git switch main
git pull
# 2. Créer une nouvelle branche
git switch -c feature/login-page
# 3. Travailler sur la fonctionnalité
# ... modifier des fichiers ...
# 4. Ajouter et committer les changements
git add .
git commit -m "feat: ajout de la page de connexion"
# 5. Continuer à travailler si nécessaire
# ... plus de modifications ...
git add .
git commit -m "feat: ajout de la validation du formulaire"
# 6. Fusionner dans main (voir section suivante)Fusionner des branches
git merge
Intègre les changements d'une branche dans la branche actuelle.
# 1. Revenir sur la branche de destination (main)
git switch main
# 2. Fusionner la branche feature
git merge feature/login-pageTypes de merge
Fast-forward (fusion rapide) :
Avant merge:
main: A --- B
\
feature: C --- D
Après merge (fast-forward):
main: A --- B --- C --- D
Aucun commit de merge créé, juste un déplacement du pointeur.
Three-way merge (fusion à trois branches) :
Avant merge:
main: A --- B --- E
\
feature: C --- D
Après merge (commit de fusion):
main: A --- B --- E --- M
\ /
feature: C ----- D
Un commit de merge M est créé pour combiner les deux historiques.
Options de merge
Forcer un commit de merge (même si fast-forward possible) :
git merge --no-ff feature/login-pageAnnuler un merge en cours :
git merge --abortRésoudre les conflits
Un conflit survient quand Git ne peut pas fusionner automatiquement les changements.
Exemple de conflit
git merge feature/login-pageSortie :
Auto-merging index.js
CONFLICT (content): Merge conflict in index.js
Automatic merge failed; fix conflicts and then commit the result.
Identifier les conflits
git statusLes fichiers en conflit sont marqués comme both modified.
Résoudre manuellement
Ouvrez le fichier en conflit. Git ajoute des marqueurs :
function login() {
<<<<<<< HEAD
console.log('Login v1');
return authenticate();
=======
console.log('Login v2');
return checkCredentials();
>>>>>>> feature/login-page
}Légende :
<<<<<<< HEAD: version de la branche actuelle (main)=======: séparateur>>>>>>> feature/login-page: version de la branche à fusionner
Résolution :
- Choisissez quelle version garder (ou combinez-les)
- Supprimez les marqueurs
<<<<<<<,=======,>>>>>>>
function login() {
console.log('Login v2 - improved');
return checkCredentials();
}- Marquez le conflit comme résolu :
git add index.js- Terminez le merge :
git commitGit ouvrira votre éditeur avec un message de commit pré-rempli.
Supprimer une branche
Après fusion
# Supprimer une branche locale (fusionnée)
git branch -d feature/login-page
# Forcer la suppression (même non fusionnée)
git branch -D feature/ancienne-brancheSupprimer une branche distante
git push origin --delete feature/login-pageRenommer une branche
# Renommer la branche actuelle
git branch -m nouveau-nom
# Renommer une autre branche
git branch -m ancien-nom nouveau-nomComparer des branches
# Voir les différences entre deux branches
git diff main..feature/login-page
# Voir les commits dans feature mais pas dans main
git log main..feature/login-page
# Voir les commits uniques dans chaque branche
git log --left-right --oneline main...feature/login-pageVisualiser l'arbre des branches
# Graphique simple
git log --oneline --graph --all
# Graphique détaillé
git log --graph --all --decorate --onelineExemple de sortie :
* a3f5b21 (HEAD -> feature/login) feat: add login form
* b8c4d92 feat: create auth service
| * c1e2f53 (main) fix: update dependencies
|/
* d4f6g78 docs: update README
Stratégies de branches avancées
Rebase (alternative au merge)
Rebase réécrit l'historique pour créer une ligne droite :
git switch feature/login-page
git rebase mainAvant rebase :
main: A --- B --- C
\
feature: D --- E
Après rebase :
main: A --- B --- C
\
feature: D' --- E'
Règle d'or : rebase pour nettoyer son historique LOCAL avant de pusher, merge pour intégrer des branches distantes.
Cherry-pick
Appliquer un commit spécifique d'une branche à une autre :
git switch main
git cherry-pick a3f5b21Utile pour appliquer un bugfix à plusieurs branches.
Stash (mettre de côté)
Stash sauvegarde temporairement vos modifications sans créer de commit.
# Mettre de côté les modifications
git stash
# Avec un message
git stash push -m "WIP: formulaire de connexion"
# Lister les stashes
git stash list
# Réappliquer le dernier stash
git stash pop
# Réappliquer un stash spécifique
git stash apply stash@{1}
# Supprimer un stash
git stash drop stash@{0}
# Supprimer tous les stashes
git stash clearCas d'usage : changer rapidement de branche sans committer des modifications incomplètes.
Bonnes pratiques
Branches courtes : créez des branches pour des tâches spécifiques et fusionnez-les rapidement (quelques jours max).
Commits atomiques : chaque commit doit représenter un changement logique et complet.
Pull avant push : toujours récupérer les dernières modifications avant de pousser.
Supprimer les branches fusionnées : nettoyez régulièrement les branches obsolètes.
Nommage cohérent : utilisez des conventions d'équipe pour nommer les branches.
Pas de travail direct sur main : créez toujours une branche pour vos modifications.
Résumé des commandes
| Commande | Description |
|---|---|
git branch | Lister les branches |
git branch <nom> | Créer une branche |
git switch <nom> | Changer de branche |
git switch -c <nom> | Créer et changer de branche |
git merge <branche> | Fusionner une branche |
git branch -d <nom> | Supprimer une branche |
git log --graph --all | Visualiser l'arbre |
git stash | Mettre de côté les modifications |