Objectifs
- Comprendre l’utilité des branches pour isoler le travail et collaborer.
- Créer, lister et changer de branche avec
git branchetgit switch. - Fusionner les changements d’une branche dans une autre avec
git merge. - Comprendre la différence entre un merge “fast-forward” et un “merge commit”.
- Apercevoir
git rebasecomme une alternative pour maintenir un historique linéaire.
Pourquoi utiliser des branches ?
Une branche dans Git est une ligne de développement indépendante. C’est comme créer une copie de votre projet où vous pouvez expérimenter, ajouter une nouvelle fonctionnalité, ou corriger un bug, sans jamais toucher à la version principale stable (généralement la branche main).
C’est le concept central qui permet à des équipes entières de travailler en parallèle sur le même projet sans se marcher sur les pieds.
Commandes de gestion des branches
git branch: Liste toutes vos branches locales.git branch <nom-de-la-branche>: Crée une nouvelle branche.git switch <nom-de-la-branche>: Change de branche pour commencer à travailler dessus. (La commande moderne qui remplacegit checkout <nom>).git switch -c <nom-de-la-branche>: Crée une nouvelle branche et bascule dessus en une seule fois.git branch -d <nom-de-la-branche>: Supprime une branche (uniquement si elle a été fusionnée).
Fusionner des branches avec git merge
Une fois que votre travail sur une branche est terminé et testé, vous voulez l’intégrer à la branche principale (main). C’est le rôle de git merge.
Le processus est le suivant :
- On se place sur la branche qui doit recevoir les changements :
git switch main. - On lance la commande de fusion :
git merge <branche-a-fusionner>.
Fast-forward vs. Merge Commit
- Fast-forward : Si la branche
mainn’a reçu aucun nouveau commit pendant que vous travailliez sur votre branche, Git se contente de déplacer le pointeur demainvers le dernier commit de votre branche. L’historique reste une ligne droite. C’est simple, mais on perd l’information qu’un travail a été fait dans une branche séparée. - Merge Commit : Si les deux branches ont divergé (chacune a reçu de nouveaux commits), Git crée un nouveau “commit de fusion”. Ce commit spécial a deux parents et unifie l’historique des deux branches. C’est la méthode par défaut dans ce cas. On peut la forcer avec l’option
--no-ff(no fast-forward) pour toujours garder une trace de la branche de fonctionnalité.
Alternative : git rebase
git rebase est une autre façon d’intégrer des changements. Au lieu de créer un commit de fusion, il prend vos commits et les “rejoue” un par un au-dessus des derniers changements de la branche main.
- Avantage : Crée un historique linéaire, plus facile à lire.
- Inconvénient : Il réécrit l’historique, ce qui est dangereux sur une branche partagée par plusieurs personnes.
Règle simple pour débuter : utilisez merge pour les branches partagées et gardez rebase pour nettoyer votre propre travail en local avant de le partager.
Bonnes pratiques
- Créez une branche pour chaque tâche, même la plus petite.
- Nommez vos branches de manière descriptive :
feature/ajout-loginfix/bug-affichage-mobile
- Fusionnez et supprimez régulièrement les branches de fonctionnalités une fois qu’elles sont terminées pour garder un dépôt propre.
- Privilégiez les merge commits (
--no-ff) pour les fonctionnalités importantes. Cela rend l’historique plus lisible en regroupant tous les commits d’une feature.
Pièges courants
- Oublier sur quelle branche on se trouve : Utilisez
git branchou configurez votre prompt de terminal pour toujours afficher la branche active. - Fusionner dans le mauvais sens : Assurez-vous d’être bien sur la branche réceptrice (
main) avant de lancergit merge. - Utiliser
git rebasesur une branche partagée : C’est la source de nombreux problèmes pour les équipes. Ne réécrivez l’historique que s’il est local et que vous êtes seul à travailler dessus.
Exercices
-
Votre première branche :
- Dans un dépôt existant, créez une branche
feature/test-branche. - Basculez sur cette branche.
- Créez un nouveau fichier, ajoutez-le et faites un commit.
- Utilisez
git log --oneline --graph --allpour visualiser les deux branches.
- Dans un dépôt existant, créez une branche
-
Votre première fusion :
- Revenez sur la branche
main(git switch main). - Fusionnez votre branche de feature :
git merge feature/test-branche. - Observez le message (probablement un fast-forward).
- Revenez sur la branche
-
Créer un conflit (volontairement) :
- Créez une nouvelle branche
feature/conflit. - Modifiez la première ligne d’un fichier. Faites un commit.
- Retournez sur
mainet modifiez la même ligne de manière différente. Faites un commit. - Essayez de fusionner
feature/conflitdansmain. Git s’arrêtera et vous demandera de résoudre le conflit. C’est l’objet de la prochaine leçon !
- Créez une nouvelle branche