Introduction à la gestion des branches avec Git

Créer des branches

DéfinitionBranche

Une branche est une divergence effectuée pour travailler séparément sur des fonctionnalités différentes.

Jusqu'à maintenant, on s'est contentés de travailler sur une seule branche.

FondamentalIntérêt des branches

  • Gestion séparée des fonctionnalités

  • Meilleure compréhensibilité des changements

  • Meilleure traçabilité des bugs.

MéthodeCréation d'un projet (dépôt distant)

Pour le Gitlab de l'UTC :

  • Se rendre sur https://gitlab.utc.fr

  • Une fois connecté avec ses identifiants CAS, il suffit d'appuyer sur le bouton « New project » et de renseigner un nom et un niveau de visibilité

Pour git, qu'est-ce qu'une branche ?

Pour git, une branche, c'est une étiquette un peu spéciale, sur laquelle on peut faire un peu plus d'opérations que d'habitude.

On peut se déplacer, effectuer un diff, un show

FondamentalLa branche master

La branche master est la branche principale du projet. Elle est créée automatiquement au départ du projet et sa tête devrait être une versions fonctionnelle du projet.

Créer des branches et les utiliser

MéthodeCréer une branche

La manière commune de créer une branche est d'utiliser

git branch ma_branche

Il existe d'autres manières de créer une branche, comme par exemple

git checkout -b ma_branche master

Cette commande dit :

  1. Déplace toi sur la branche ma_branche.

  2. l'option -b indique que la branche ma_branche n'existe pas et qu'il faut la créer.

  3. master est le point de départ de la branche.

DéfinitionFaire un commit sur une branche

Soit une branche ma_branche ayant pour dernier commit mon_commit, faire un nouveau commit sur la branche ma_branche signifie

  • Créer un commit fils au commit mon_commit

  • Déplacer l'étiquette de la branche sur le nouveau commit

MéthodeVérifier la branche sur laquelle on est

Pour vérifier la branche sur laquelle on est on peut utiliser la commande git branch sans utiliser d'argument. Elle liste toutes les branches disponibles et met une étoile sur la branche master

ConseilNe plus avoir à vérifier la branche sur laquelle on est

Il existe de nombreuses manières de changer son prompt pour qu'il affiche en permanence l'état du dépôt sur lequel on est. Et notamment la branche sur laquelle on est.

Application

Créez un dossier init_git et créez-y un dépôt git. Mettez-y un fichier toto.txt. Commitez les modifications. Ensuite, créez trois branches et déplacez vous

mkdir init_git
cd init_git
git init
touch toto.txt
git add toto.txt
git commit -m "premier commit"
git branch alice
git branch bob
git checkout -b charlie

Ajoutez une ligne contenant "pomme" dans votre fichier aller sur la branche alice et constater que le changement n'est pas fait sur la nouvelle branche

echo "pomme" >> toto.txt
cat toto.txt
git commit -am "Add pomme to toto.txt"
git checkout alice
cat toto.txt

La fusion de branches

MéthodeFusion de branches

Fusionner des branches, c'est réunir le travail de deux personnes différentes en une seule, pour le faire, on utilise la commande git merge, celle-ci crée en général un commit de fusion

Remarque

Le commit de fusion est le seul type de commit qui puisse avoir deux parents.

Syntaxe

git merge target_branch

La commande précédente met toutes les modifications de la branche cible dans la branche courante.

Défi : Veille

Reprenez votre dépôt et executez les commandes suivantes. Que font-elles ? Fusionnez les deux branches

git checkout alice
touch alicefile.txt
git add alicefile.txt
git commit -m "Create file for alice"
git checkout bob
touch bobfile.txt
git add bobfile.txt
git commit -m "Create file for bob"

Vous êtes encore dans la branche de bob, pour fusionner la branche de Alice dans celle de Bob, il faut utiliser git merge

git merge alice

Rattraper son retard

DéfinitionRebaser

Rebaser, c'est réorganiser son historique et ses étiquettes.

FondamentalRattraper son retard

Pour rattraper son retard sur une branche distante, on effectue souvent un rebase.

Ce rebase prend l'ensemble des commits de la branche cible et les intègre dans l'historique de la branche courante.

AttentionLe rebase est à consommer avec modération

Rebase, c'est modifier son historique, et c'est donc prendre le risque de ne plus être synchronisé avec les dépôts distants, c'est donc à utiliser avec beaucoup de précautions.

ExempleUn rebase simple

Si vous avez du retard sur une branche mais que vous n'avez rien fait, vous pouvez rebase sans problèmes.

ExempleUn rebase un peu plus complexe

Si vous avez du retard sur une branche et que vous avez effectué des commits, c'est un peu plus risqué, mais pas de panique

ExempleUn rebase pour la forme

Le rebase, c'est aussi ça. Mais on ne va pas s'y appesantir.

Défi : Veille

Retournez dans votre dépôt. Charlie est en retard sur alice et bob, faites lui rattraper son retard.

git checkout charlie
git rebase alice

Que font les commandes suivantes ?

git checkout alice
echo "poire" >> alicefile.txt
git commit -am "Update fruits for alicefile"
git checkout bob
echo "banane" >> alicefile.txt
git commit -am "Update fruits for alicefile"

Effectuez un merge de alice dans bob

Souvenez vous de la gestion de conflits.

La gestion des branches avec git

Que fait la commande

 git checkout -b ma_branche

Elle crée une branche ma_branche si ma_branche n'existe pas

Elle écrase la branche ma_branche avec une nouvelle si ma_branche existe

Elle me déplace vers la branche ma_branche si celle-ci n'existait pas avant

Elle me déplace vers la branche ma_branche si celle-ci existait déjà avant

Quelles phrases sont vraies

La commande "git branch -D ma_branche" crée une branche nommée ma_branche

La commande "git merge alice" fusionne la branche courante avec la branche alice

La commande "git rebase" est une commande dangereuse

Si l'on doit résoudre des conflits, c'est parce que l'on a mal géré ses branches

La gestion arborescente est une spécificité de git

C'est une bonne idée de rebase si...

Je n'ai pas produit de nouvelles versions depuis longtemps et les autres ont beaucoup avancé

J'ai effectué des modifications majeures et je dois les incorporer à un projet avant de push

J'ai effectué des modifications mineures et je dois les incorporer à un projet avant de push

La branche master a vocation à :

Contenir à terme une très large partie des commits

Être fonctionnelle à tout moment

Contenir la version la plus avancée du projet, qu'elle soit stable ou non

servir de base pour les versions publiées d'un projet

Elle crée une branche ma_branche si ma_branche n'existe pas

Elle écrase la branche ma_branche avec une nouvelle si ma_branche existe

Elle me déplace vers la branche ma_branche si celle-ci n'existait pas avant

Elle me déplace vers la branche ma_branche si celle-ci existait déjà avant

Git checkotu -b créera une branche ma_branche et vous y déplacera. Si elle détecte que la branche existe déjà, elle renvoie une erreur et ne fait rien.

Quelles phrases sont vraies

La commande "git branch -D ma_branche" crée une branche nommée ma_branche

La commande "git merge alice" fusionne la branche courante avec la branche alice

La commande "git rebase" est une commande dangereuse

Si l'on doit résoudre des conflits, c'est parce que l'on a mal géré ses branches

La gestion arborescente est une spécificité de git

La commande "git branch -D ma_branche" crée une branche nommée ma_branche

Cette commande SUPPRIME la branche ma_branche

La commande "git merge alice" fusionne la branche courante avec la branche alice

La commande "git rebase" est une commande dangereuse

Si l'on doit résoudre des conflits, c'est parce que l'on a mal géré ses branches

Il est tout à fait normal de devoir gérer des conflits quand certaines personnes doivent travailler dans la même partie du code.

La gestion arborescente est une spécificité de git

Pouvoir gérer des versions en arborescence est une fonctionnalité de base de beaucoup de gestionnaires de version.

C'est une bonne idée de rebase si...

Je n'ai pas produit de nouvelles versions depuis longtemps et les autres ont beaucoup avancé

J'ai effectué des modifications majeures et je dois les incorporer à un projet avant de push

J'ai effectué des modifications mineures et je dois les incorporer à un projet avant de push

La branche master a vocation à :

Contenir à terme une très large partie des commits

Être fonctionnelle à tout moment

Contenir la version la plus avancée du projet, qu'elle soit stable ou non

servir de base pour les versions publiées d'un projet

Contenir à terme une très large partie des commits

Être fonctionnelle à tout moment

Contenir la version la plus avancée du projet, qu'elle soit stable ou non

servir de base pour les versions publiées d'un projet

C'est souvent à partir de la branche master que l'on crée des versions. Si certaines versions nécessitent des correctifs spécifiques, on a pour coutume de créer des branches spécifiques pour appliquer des correctifs à des versions spécifiques.

Liste des raccourcis clavier

Liste des fonctions de navigation et leurs raccourcis clavier correspondant :

  • Bloc Suivant : flèche droite, flèche bas, barre espace, page suivante, touche N
  • Bloc Précédent : flèche gauche, flèche haut, retour arrière, page précédente, touche P
  • Diapositive Suivante : touche T
  • Diapositive Précédente : touche S
  • Retour accueil : touche Début
  • Menu : touche M
  • Revenir à l'accueil : touche H
  • Fermer zoom : touche Échap.