Les branches sont l'un des concepts de base de Git. Et il y a une quantité infinie de choses que vous pouvez faire avec eux. Vous pouvez les créer et les supprimer, les renommer et les publier, les changer et les comparer... et bien plus encore.
Mon intention avec cet article est de créer un aperçu complet de ce que vous pouvez faire avec les branches dans Git. Je ne voulais pas produire un article de la longueur d'un livre, donc je n'entrerai pas dans le détail de toutes les actions. Mais je fournirai des liens si vous voulez en savoir plus.
Voici un aperçu de ce que nous allons couvrir :
- Comment créer des branches
- Comment renommer les branches
- Comment changer de branche
- Comment publier des branches
- Comment suivre les succursales
- Comment supprimer des branches
- Comment fusionner des branches
- Comment rebaser les branches
- Comment comparer les succursales
Comment créer une branche dans Git
Avant de pouvoir travailler avec des branches, vous devez en avoir dans votre référentiel. Alors commençons par parler de la façon de créer des branches :
$ git branch
Lorsque vous ne fournissez qu'un nom aubranche git
commande, Git supposera que vous souhaitez démarrer votre nouvelle branche en fonction de votre révision actuellement extraite. Si vous souhaitez que votre nouvelle succursale démarre à unspécifiquerévision, vous pouvez simplement ajouter le hachage SHA-1 de la révision :
$ git branch 89a2faad
Il va sans dire que vous ne pouvez créer de nouvelles branches que dans votre référentiel local. "Créer" des branches dans un référentiel distant se produit en publiant unlocal existantbranche - dont nous parlerons plus tard.
Comment renommer une branche dans Git
Faire une erreur de frappe sur le nom d'une succursale ou simplement changer d'avis après coup n'est que trop facile. C'est pourquoi Git permet de renommer assez facilement une branche locale. Si vous souhaitez renommer votre branche HEAD actuelle, vous pouvez utiliser la commande suivante :
$ git branch -m
Si vous souhaitez renommer une branche locale différente (qui n'est PAS actuellement extraite), vous devrez fournir l'ancienetle nouveau nom :
$ git branch -m
Ces commandes, encore une fois, sont utilisées pour travailler avec des branches locales. Si vous souhaitez renommer une branche distante, les choses sont un peu plus compliquées - car Git ne vous permet pas de renommer des branches distantes.
En pratique, renommer une branche distante peut être fait en supprimant l'ancienne puis en poussant la nouvelle depuis votre dépôt local :
# Tout d'abord, supprimez la branche actuelle/ancienne :$ git push origin --delete # Ensuite, poussez simplement la nouvelle branche locale avec le nom correct :$ git push -u origin
Si vous utilisez unInterface graphique de bureau Git comme Tower, vous ne serez pas dérangé par ces détails : vous pouvez simplement renommer les branches locales et distantes à partir d'un menu contextuel (inutile de supprimer et de retransmettre quoi que ce soit) :

Comment changer de branche dans Git
La branche actuelle (également appelée branche HEAD) définit le contexte dans lequel vous travaillez en ce moment. Ou en d'autres termes : la branche HEAD actuelle est l'endroit où les nouveaux commits seront créés.
Cela dit, il est logique quecommutationla branche actuellement active est l'une des actions les plus utilisées qu'un développeur effectue lorsqu'il travaille avec des branches.
Et comme le changement de branche est également appelé "vérifier" les branches, vous ne serez pas surpris d'apprendre la commande utilisée pour que cela se produise :
$ git checkout
Cependant, parce que lepaiement git
La commande a tellement de tâches différentes que la communauté Git (assez récemment) a introduit une nouvelle commande que vous pouvez désormais également utiliser pour modifier la branche HEAD actuelle :
$ git switch
Je pense qu'il est très logique de s'éloigner de lavérifier
commande - parce qu'elle est utilisée pour effectuer tant d'actions différentes - et à la place se déplacer vers la nouvellechanger
commande, qui est absolument sans ambiguïté sur ce qu'elle fait.
Comment publier une branche dans Git
Comme je l'ai déjà dit dans la section sur la "création de branches" ci-dessus, il n'est pas possible decréerune nouvelle branche sur un référentiel distant.
Ce que nous pouvons faire, cependant, c'estpublier une branche locale existantesur un référentiel distant. Nous pouvons "télécharger" ce que nous avons localement sur la télécommande et ainsi le partager avec notre équipe :
$ git push -u origin
La commande, dans l'ensemble, n'est probablement pas une grande surprise pour vous. Mais un paramètre, le-u
flag, vaut la peine d'être expliqué - ce que je ferai dans la section suivante.
Mais pour vous donner la version courte ici : il indique à Git d'établir une "connexion de suivi" qui rendra le push et le pull beaucoup plus faciles à l'avenir.
Comment suivre les branches dans Git
Par défaut, les branches locales et distantes n'ont rien à voir l'une avec l'autre. Ils sont stockés et gérés comme des objets indépendants dans Git.
Mais dans la vraie vie, bien sûr, les succursales locales et distantes sont souventfaireont une relation les uns avec les autres. Par exemple, une succursale distante est souvent quelque chose comme "l'homologue" d'une succursale locale.
Une telle relation peut être modélisée dans Git : une branche (généralement locale) peut en "suivre" une autre (généralement distante).

Une fois qu'une telle relation de suivi a été établie, certaines choses deviendront beaucoup plus faciles : plus particulièrement, lorsque vous poussez ou tirez, vous pouvez simplement utiliser les commandes vanille sans aucun autre paramètre (par exemple, un simplegit pousser
).
La connexion de suivi aide Git à remplir les blancs - quelle branche sur quelle télécommande vous voulez pousser, par exemple.
Vous avez déjà lu une façon d'établir une telle connexion de suivi : en utilisantgit pousser
avec le-u
option lors de la publication d'une branche locale pour la première fois fait exactement cela. Après cela, vous pouvez simplement utilisergit pousser
sans mentionner la branche distante ou cible.
Cela fonctionne également dans l'autre sens : lors de la création d'une branche locale qui doit être basée sur une branche distante. En d'autres termes, lorsque vous souhaitezpisteune agence distante :
$ git branch --track origine/
Alternativement, vous pouvez également utiliser lepaiement git
commande pour y parvenir. Si vous souhaitez nommer la branche locale après la branche distante, il vous suffit de spécifier le nom de la branche distante :
$ git checkout --track origin/
Si vous voulez en savoir plus sur ce sujet, consultez ceciarticle sur "Suivre les relations dans Git".
Comment supprimer une branche dans Git
Toutes les branches ne sont pas destinées à vivre éternellement. En fait, la plupart des branches d'un référentiel seront de courte durée. Donc, si vous avez envie de faire un peu de ménage, voici comment supprimer une branche locale :
$ git branch -d
Notez que vous pourriez également avoir besoin du-F
option au cas où vous essaieriez de supprimer une branche qui contient des modifications non fusionnées. Utilisez cette option avec précaution car elle facilite la perte de données !
Pour supprimer une branche distante, nous ne pouvons pas utiliser lebranche git
commande. Plutôt,git pousser
fera l'affaire, en utilisant le--supprimer
drapeau:
$ git push origin --delete
Lors de la suppression d'une branche, gardez à l'esprit que vous devez vérifier si vous devez également supprimer sa branche homologue.
Par exemple, si vous venez de supprimer une branche de fonctionnalité distante, il peut être judicieux de supprimer également sa branche de suivi locale. De cette façon, vous vous assurez de ne pas vous retrouver avec de nombreuses branches obsolètes - et un référentiel Git désordonné.
Comment fusionner des branches dans Git
La fusion est probablement le moyen le plus populaire d'intégrer des changements. Il vous permet d'apporter tous les nouveaux commits d'une autre branche dans votre branche HEAD actuelle.
L'un des avantages de Git est que la fusion de branches est si simple et sans stress. Cela ne nécessite que deux étapes :
# (1) Vérifiez la branche qui doit recevoir les modifications$ git switch main# (2) Exécutez la commande "merge" avec le nom de la branche qui contient les modifications souhaitées$ git merge feature/contact-form
Souvent, le résultat d'une fusion sera un nouveau commit séparé, le soi-disant "commit de fusion". C'est là que Git combine les modifications entrantes. Vous pouvez le considérer comme un nœud qui relie deux branches.

Il y a, bien sûr, beaucoup plus à dire surgit fusionner
. Voici quelques ressources gratuites qui vous aideront à en savoir plus :
- Comment annuler une fusion dans Git
- Comment réparer et résoudre les conflits de fusion
- Un aperçu de "git merge"
Comment rebaser les branches dans Git
Une autre façon d'intégrer les commits d'une autre branche consiste à utiliserrenard
. Et je prends bien soin d'appeler cela une voie « alternative » : ce n'est ni mieux ni moins bien, mais simplement différent.
Si et quand vous utilisez le rebase, cela dépend principalement de vos préférences personnelles et des conventions de votre équipe. Certaines équipes adorent rebaser, d'autres préfèrent fusionner.
Pour illustrer les différences entre la fusion et la rebase, jetez un œil aux illustrations suivantes. En utilisantgit fusionner
, le résultat de notre intégration debranche-Bdansbranche-Aressemblerait à ceci :

En utilisantgit rebase
, d'autre part, le résultat final sera assez différent, en particulier parce qu'aucun commit de fusion séparé ne sera créé. En utilisant rebase, il semble que votre historique de développement se déroule en ligne droite :

Le démarrage du processus réel est assez simple :
# (1) Vérifiez la branche qui doit recevoir les modifications$ git switch feature/contact-form# (2) Exécutez la commande "rebase" avec le nom de la branche qui contient les modifications souhaitées$ git rebase main
Pour une compréhension plus approfondie du rebase, je recommande le post"Utiliser git rebase au lieu de git merge".
Comment comparer les branches dans Git
Dans certaines situations, il peut être très utile de comparer deux branches. Par exemple, avant de décider d'intégrer ou de supprimer une branche, il est intéressant de voir en quoi elle diffère d'une autre branche. Contient-il de nouveaux commits ? Et si oui : ont-ils de la valeur ?
Pour voir quels commits sont dans la branche B mais pas dans la branche A, vous pouvez utiliser lejournal git
commande avec la syntaxe à double point :
$ git log branche-A..branche-B
Bien sûr, vous pouvez également l'utiliser pour comparer vos états locaux et distants en écrivant quelque chose commegit log main..origine/main
.
Si au lieu de laengagevous préférez voir lechangements réelsqui composent ces différences, vous pouvez utiliser legit diff
commande:
$ git diff branche-A..branche-B
Comment devenir plus productif avec Git
Travailler avec des branches dans Git a de nombreuses facettes ! Mais cela est vrai pour Git en général : il existe une tonne de fonctionnalités puissantes que de nombreux développeurs ne connaissent pas ou ne peuvent pas utiliser de manière productive.
De la rebase interactive aux sous-modules et du reflog à l'historique des fichiers : il est payant d'apprendre ces fonctionnalités avancées - en devenant plus productif et en faisant moins d'erreurs.
Un sujet particulièrement utile est d'apprendre àannuler les erreurs avec Git. Si vous voulez approfondir la façon dont vous pouvez sauver votre cou des erreurs inévitables, consultezcette vidéo sur la correction des erreurs dans Git.
Amusez-vous à devenir un meilleur programmeur !
A propos de l'auteur
Tobias Güntherest le co-fondateur deLa tour, le populaire client de bureau Git qui aide plus de 100 000 développeurs du monde entier à être plus productifs avec Git.