Theme
Lecon 6 / 8NouvelleMAJ 27 nov. 2025
Parcours Cours Git pour débutants

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.

#git#branches#merge#conflicts#workflow#stash

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 -r

Exemple 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 a3f5b21

Exemples :

  • feature/user-authentication
  • bugfix/fix-login-error
  • refactor/improve-database-queries

Changer de branche

git checkout / git switch

Méthode moderne (recommandée depuis Git 2.23) :

git switch nom-branche

Méthode classique :

git checkout nom-branche

Créer et basculer en une seule commande :

# Moderne
git switch -c feature/nouvelle-branche
 
# Classique
git checkout -b feature/nouvelle-branche

Exemple 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-page

Types 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-page

Annuler un merge en cours :

git merge --abort

Résoudre les conflits

Un conflit survient quand Git ne peut pas fusionner automatiquement les changements.

Exemple de conflit

git merge feature/login-page

Sortie :

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 status

Les 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 :

  1. Choisissez quelle version garder (ou combinez-les)
  2. Supprimez les marqueurs <<<<<<<, =======, >>>>>>>
function login() {
  console.log('Login v2 - improved');
  return checkCredentials();
}
  1. Marquez le conflit comme résolu :
git add index.js
  1. Terminez le merge :
git commit

Git 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-branche

Supprimer une branche distante

git push origin --delete feature/login-page

Renommer une branche

# Renommer la branche actuelle
git branch -m nouveau-nom
 
# Renommer une autre branche
git branch -m ancien-nom nouveau-nom

Comparer 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-page

Visualiser l'arbre des branches

# Graphique simple
git log --oneline --graph --all
 
# Graphique détaillé
git log --graph --all --decorate --oneline

Exemple 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 main

Avant 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 a3f5b21

Utile 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 clear

Cas 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

CommandeDescription
git branchLister 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 --allVisualiser l'arbre
git stashMettre de côté les modifications

Liens vers la partie suivante


Tags

#git #branches #merge #conflicts #workflow #stash #rebase