14/03/2024

3. Fusion de branche - merge

Lu 946 fois Licence Creative Commons

Fusionner des branches

Lorsque le travail sur une branche est finalisé et prêt à être intégré à la branche principale, on pourra fusionner les branches. Plus précisément, on intègrera le travail de la branche de travail dans la branche principale.
On réalisera l'opération avec la commande merge en passant sur la branche principale et en "mergeant" la branche de travail:

git checkout master 
[output]Switched to branch 'master'
git merge experimental 
[output]Merge made by the 'recursive' strategy.
[output] branches.md | 4 ++++
[output] 1 file changed, 4 insertions(+)
[output] create mode 100644 branches.md

Cette fusion aura nécessité un "merge commit", mais ce n'est pas toujours le cas...

Types de fusion

Git dispose de plusieurs types de fusion de branches qu'il applique automatiquement selon certaines conditions, en l'absence d'options explicites sur la technique à utiliser.

Fast Forward

Si la tête de la branche principale sur laquelle on est situé est un ancêtre de la branche de travail à fusionner, Git va automatiquement fusionner en fast forward: la tête de la branche principale sera avancée jusqu'à la tête de la branche de travail.

Représentation avant/après fusion:


Non Fast Forward

Si la branche principale a dérivé depuis la création de la branche de travail (car une autre branche de fonctionalité a été fusionnée par exemple), Git ne sera pas en mesure d'effectuer un fast forward. La technique de non fast forward consiste à créer un nouveau commit spécifique à la fusion des branches.

Représentation avant/après fusion:


On peut faire en sorte de toujours effectuer une fusion non fast forward avec l'option --no-ff:

git merge --no-ff experimental

L'avantage du "no-ff" est qu'il est plus simple de savoir quels commits ont servis à implémenter une fonctionnalité en lisant l'historique. Egalement, pour annuler entièrement la fonctionnalité il suffit de retourner 1 commit en arrière.

Note: avec des branches fusionnées en non fast forward, lisez l'historique en rajoutant l'option --graph: git log --oneline --graph


Partie pratique

  1. Analysez votre historique. Compte tenu des commits enregistrés, si vous voulez fusionner la branche experimental dans master, Git appliquera t-il un Fast Forward ou un Non Fast Forward ?

  2. Ajouter un fichier branches.md et un commit dans la branche experimental. Fusionner la branche dans master.