Les branches
Ce que tu vas apprendre
- Pourquoi travailler sur une branche plutôt que directement sur
main. - Créer une branche, passer de l'une à l'autre et les lister.
- Fusionner avec
git merge, et résoudre un conflit sans paniquer.
Pourquoi brancher
Ton portfolio est en ligne et fonctionne. Tu veux ajouter un champ de recherche, ce qui va prendre plusieurs jours. Pendant ce temps, quelqu'un te signale une faute sur la page d'accueil.
Si tu travailles directement sur main, ta recherche à moitié finie se mélange à la correction. Une branche règle ça : c'est une ligne de travail à part. Tu développes la recherche sur sa branche, tu corriges la faute sur main, et tu réunis les deux quand la recherche est prête.
Une branche n'est qu'une étiquette posée sur un commit. La créer ne copie aucun fichier : c'est instantané, même sur un gros projet.
Créer une branche et y aller
git switch -c recherche
Décortiquons cette commande :
$Programme · git
Le programme à lancer : Git.
- Programme
- Sous-commande
- Option
- Argument
L'option -c (pour create) crée la branche recherche sur le commit actuel, puis t'y place. Les commits que tu feras ensuite partiront sur recherche, et main ne bougera pas.
Changer de branche
git switch main
Git remet les fichiers du dossier dans l'état du dernier commit de main. Ton travail sur recherche n'est pas perdu : il t'attend sur sa branche.
git status, avant de changer de branche. Si des modifications non enregistrées entrent en conflit avec l'autre branche, Git refuse de changer pour ne rien écraser.Tu verras aussi git checkout dans beaucoup de tutoriels. Cette commande reste valable, mais elle fait beaucoup de choses différentes. git switch est la commande recommandée pour changer de branche.
Lister les branches
git branch
La branche où tu te trouves est marquée d'une étoile. Pour supprimer une branche déjà fusionnée :
git branch -d recherche
Seule l'étiquette disparaît. Les commits restent dans l'historique de la branche où ils ont été fusionnés.
Fusionner avec git merge
Pour réunir deux branches, place-toi sur celle qui doit recevoir le travail, puis fusionne l'autre :
git switch main
git merge recherche
Selon l'historique, Git fait l'une de ces deux choses.
Le commit de fusion
Si main a reçu des commits pendant que tu travaillais sur recherche, les deux histoires ont divergé. Git crée alors un commit de fusion, qui a deux parents. Suis le scénario complet :
$ git log --onelinePoint de départ : deux commits sur main.
L'avance rapide
Si main n'a pas bougé depuis la création de la branche, rien ne diverge. Git avance simplement l'étiquette main jusqu'au dernier commit de la branche, sans créer de commit de fusion. On parle d'avance rapide (fast-forward).
$ git switch -c correctifNouvelle branche sur C2.
Les conflits
Parfois, les deux branches ont modifié les mêmes lignes du même fichier. Git ne peut pas deviner laquelle garder : il s'arrête et annonce un conflit. Ce n'est pas une erreur grave, juste une question qu'il te pose.
Lire un conflit
git status liste les fichiers en conflit. Dans chacun, Git a inséré des marqueurs :
<<<<<<< HEAD
<h1>Bienvenue sur mon portfolio</h1>
=======
<h1>Mon portfolio</h1>
>>>>>>> recherche
- Entre
<<<<<<< HEADet=======: la version de ta branche actuelle, icimain. - Entre
=======et>>>>>>> recherche: la version de la branche que tu fusionnes.
Résoudre un conflit
- Ouvre le fichier et choisis le bon contenu : l'une des versions, l'autre, ou un mélange des deux.
- Supprime les trois lignes de marqueurs.
- Indique à Git que le conflit est réglé, puis termine la fusion :
git add index.html
git commit
Git propose un message de fusion déjà rempli : tu peux le garder tel quel.
Si tu préfères tout annuler et revenir à l'état d'avant la fusion :
git merge --abort
git add, vérifie qu'il ne reste aucun marqueur <<<<<<< ou >>>>>>> dans le fichier. Sinon, ils partent dans le commit et cassent ta page.À retenir
- Une branche est une étiquette sur un commit : la créer est instantané et ne copie rien.
git switch -c nomcrée une branche et s'y place,git switch nomchange de branche.git mergefusionne en avance rapide si rien n'a divergé, sinon avec un commit de fusion.- Un conflit se résout en éditant le fichier, en retirant les marqueurs, puis
git addetgit commit. git merge --abortannule une fusion en cours.
Pour aller plus loin
Sources officielles
Ensuite
Premiers commits
Le cycle de base de Git, status, add, commit, puis log et diff pour relire l'historique, avec un .gitignore et de bons messages.
Travailler à plusieurs
Relier ton dépôt à un dépôt distant, cloner, envoyer et récupérer des commits avec push, fetch et pull, et proposer tes changements par pull request.
- Projet
- Lignes de code
- Niveau
- Rez-de-chaussée
- Appartement
- Git
- Pièce
- 3/7
- Plan n°
- git/03.branches