Branches et fusion
Créer des branches, basculer, fusionner et gérer un conflit.
Objectifs
À la fin de cette leçon, vous saurez :
- expliquer qu'une branche est une simple référence vers un commit ;
- créer une branche, y travailler, revenir sur main ;
- fusionner avec
mergeet résoudre un conflit basique.
🔗 Pour vous rafraîchir la mémoire : vos premiers commits
Une branche n'est pas une copie
Idée reçue fréquente : créer une branche dupliquerait le projet. Non. Une branche est un pointeur (un fichier de 41 octets) vers un commit :
A ← B ← C
↑
main
A ← B ← C ← D ← E
↑ ↑
(main) feature
Créer feature ne coûte rien ; ensuite, les deux branches avancent indépendamment à chaque commit.
Créer et naviguer
git branch feature # crée le pointeur
git switch feature # déplace HEAD dessus
# ... modifications + commits ...
git switch main # retour : vos fichiers reviennent à l'état de main
Raccourci courant : git switch -c feature crée et bascule en un seul geste.
HEAD est l'étiquette « vous êtes ici ». git log --oneline --all --graph visualise toutes les branches.
Fusionner
Sur feature, deux commits ont ajouté un fichier notes.md. Retour sur main :
git switch main
git merge feature
Git avance simplement main vers E (fast-forward) quand l'historique est linéaire.
Le conflit : normal et gérable
Un conflit survient quand deux branches modifient la même ligne différemment :
<<<<<<< HEAD
Version sur main
=======
Version de feature
>>>>>>> feature
Protocole :
- ouvrir le fichier ;
- choisir / combiner le bon contenu, supprimer les marqueurs
<<<<<<<,=======,>>>>>>>; git add fichierpuisgit commitpour conclure la fusion.
Un conflit n'est pas une panne : c'est Git qui refuse de décider à votre place.
Exercice
- Dans votre dépôt, créez la branche
ideesdepuis main. - Ajoutez-y un fichier
idees.txtavec trois idées, commitez. - Revenez sur main : vérifiez que
idees.txta disparu du disque. - Revenez sur
idees, ajoutez aussi une ligne dansREADME... puis fusionnez dans main. - Affichez le graphe final avec
--graph.
Résumé
- Branche = pointeur mobile vers un commit, création instantanée.
switchdéplace HEAD ; chaque branche a son historique propre.mergeintègre ; conflit = décision humaine à prendre.
Correction disponibleCherchez d’abord par vous-même.Voir la correction
Correction
Réponses détaillées
Exercice 3. Le fichier n'existe plus car le working directory reflète toujours le commit courant (main). Il est en sécurité dans l'historique de idees.
Exercice 5. Graphe attendu :
* Fusion de idees
|\
| * Ajoute des idées
* | (éventuel commit sur main)
|/
* Commits précédents
Si main n'a pas bougé pendant votre travail, la fusion est un fast-forward sans commit de fusion — les deux graphes sont corrects.