Branches et fusions

Une fois que vous avez travaillé sur votre partie du projet, vous souhaitez partager votre contenu avec le reste des membres de l’équipe en ayant un seul et unique projet final. Pour cela, il existe une fusion des branches, c’est-à-dire que le contenu de votre branche est ramené dans le contenu de la branche principale ‘master’.

 

  • Fusionner les branches

Créons un nouveau fichier ’my-notebook.ipynb’ dans mon dossier ‘mon-projet-a-moi’ dans la branche ‘my-branch’. Ajoutez la modification et faites un commit.

Placez vous dans la branche master avec la commande git checkout master puis fusionnez la branche ‘my-branch’ avec la branche master en tapant la commande git merge my-branch.

NB : vous pouvez visualiser l’arborescence détaillée de votre projet en tapant gitk. Cette commande ouvre une application graphique qui permet de visualiser l’arborescence.

 

Lorsque vous décidez de créer des nouvelles branches pour travailler sur une partie précise du projet, il est conseillé de garder la branche principale ‘master’ dans l’état à laquelle elle était avant la séparation et de n’apporter des modifications que dans sa branche. Dans un cas où le même fichier est modifié dans la branche ‘master’ et dans une branche secondaire, il est possible que Git trouve un conflit si vous décidez de les fusionner.

Dans le même sens, si vous décidez de travailler sur une branche « brouillon », et que vous devez apporter une modification dans la branche master en remote, il est conseillé de créer une nouvelle branche à partir de la branche ‘master’, d’apporter ses modifications, et de fusionner la branche ‘master’ avec cette branche.

 

  • Visualiser le système d’arborescence

Historique de commit

Voici la branche principale ‘master’ avec ses trois commits C0, C1, C2.

 

Nouvelle branche et son nouveau commit

Création d’une nouvelle branche ‘iss53’ pour travailler sur un nouveau projet en parallèle. Nous avons fait une modification et avons enregistré un nouveau commit C3.

 

Troisième branche ‘hotfix’ pour modifier un élément sur la branche ‘master’ sur le dépôt en remote.

Il faut apporter une modification sur le projet en ligne, arrêté au commit C2. Pour ne pas modifier directement la branche ‘master’, nous créons une troisième branche ‘hotfix’ pour apporter notre modification.

 

Fast-forward : Fusion de la correction ‘hotfix’ et de la branche ‘master’

Une fois la modification faite et validée, nous pouvons fusionner la branche ‘master’ avec la branche ‘hotfix’. Cela créé donc deux commits en parallèle, un C3 dans la branche ‘iss53’ et un C4 dans ‘master’ (anciennement ‘hotfix’). Nous pouvons supprimer la branche ‘hotfix’ qui n’est plus utile.

La fusion de ‘master’ et de ‘hotfix’ a utilisé le procédé fast-forward. La tête (HEAD) de la branche principale ne pointe plus vers le commit C2 mais s’est déplacé d’un commit et pointe vers C4. La fusion fast-forward est le déplacement du HEAD, ce qui n’est pas une fusion à proprement parler.

 

Nouveau commit sur la branche ‘iss53’

Maintenant que la fusion fast-forward a été faite, nous continuons à travailler sur notre projet dans la branche ‘iss53’ et créons un nouveau commit C5.

 

Recursive strategy : Fusion des branches ‘master’ et ‘iss53’

Maintenant, nous avons terminé de travailler sur notre projet ‘iss53’ et nous souhaitons fusionner nos travaux avec la branche ‘master’. Le procédé de fusion sera différent du précédent car ils n’ont pas de commit commun. La branche ‘master’ ne peut pas faire de fusion fast-forward et donc se déplacer de C4 à C5. Pour cela, Git crée un nouveau commit C6 commun aux commits C4 et C5. Ce nouveau commit aura donc les correctifs du commit C4 plus l’avancement du commit C5.

 

 

Source des schémas : https://git-scm.com/book/fr/v2/Les-branches-avec-Git-Branches-et-fusions%C2%A0%3A-les-bases.