Git

Git Merge -no-ff Option

Git Merge -no-ff Option

Comprendre l'option Git Merge no-ff

La capacité de fusion facile de git est l'un de ses points forts. Lors d'une fusion, git utilise une fusion rapide lorsqu'il remarque que le HEAD de la branche actuelle est un ancêtre du commit que vous essayez de fusionner. Dans une fusion rapide, il n'y a pas de nouveau commit. Git déplace juste le pointeur. Si ce comportement n'est pas souhaitable, vous pouvez utiliser l'indicateur no-ff pour créer un nouveau commit pour la fusion.

A quoi ressemble la fusion avec et sans avance rapide

Après une avance rapide, votre historique git ressemblera à ceci :

C0 -> C1  -> C2-> C3

Pour le même nombre de commits, voici un historique de fusion sans avance rapide :

Dans le premier cas, rien n'indique qu'il y ait eu une ramification. Dans le second cas, l'historique affiche un commit C4 pour indiquer où la fusion a eu lieu.

Parcourir un exemple

Vous allez créer un référentiel git, créer une branche, puis essayer les fusions avec et sans avance rapide.

Section 1 : Configuration

Tout d'abord, vous pouvez créer le référentiel git avec les étapes suivantes :

$ mkdir mon_projet
$ cd mon_projet
$ git init
$ toucher un.SMS
$ git ajouter -A
$ git commit -m "C0 : Ajout d'un.SMS"

Créons maintenant une branche appelée features et validons quelques modifications :

$ git branch fonctionnalités
$ git checkout fonctionnalités
$ toucher b.SMS
$ git ajouter -A
$ git commit -m "C1 : Ajout de b.SMS"
$ toucher c.SMS
$ git ajouter -A
$ git commit -m "C2 : Ajout de c.SMS"
$ toucher d.SMS
$ git ajouter -A
$ git commit -m "C3 : Ajout d.SMS"

Section 2 : Fusionner avec l'avance rapide

Revenons à la branche master et fusionnons la branche de fonctionnalités dedans :

$ git checkout maître
$ git merge fonctionnalités

Production:

Mise à jour 08076fb… 9ee88eb
Avance rapide
b.txt | 0
c.txt | 0
ré.txt | 0
3 fichiers modifiés, 0 insertions(+), 0 suppressions(-)
créer le mode 100644b.SMS
créer le mode 100644 c.SMS
créer le mode 100644 d.SMS

Si vous consultez l'historique, vous verrez :

$ git log --oneline
9ee88eb C3 : Ajout d.SMS
c72b92c C2 : Ajout de c.SMS
2e4039e C1 : Ajout de b.SMS
08076fb C0 : Ajout d'un.SMS

Ainsi, tous les commits de la branche features se trouvent maintenant dans la branche master. Si vous continuez à apporter des modifications à master, il n'y a aucun moyen de savoir quand la branche de fonctionnalités y a été fusionnée.

Section 3 : Sans avance rapide

Répétez la section 1 pour un nouveau dossier.

Ensuite, essayez une fusion sans avance rapide :

$ git checkout maître
$ git merge --no-ff fonctionnalité

Il ouvrira ce qui suit dans l'éditeur de texte par défaut de votre git :

Fusionner les « fonctionnalités » de la branche
# Veuillez saisir un message de validation pour expliquer pourquoi cette fusion est nécessaire,
# surtout s'il fusionne un amont mis à jour dans une branche thématique.
#
# Les lignes commençant par '#' seront ignorées et un message vide sera annulé
# le commit.

Modifier les commentaires. Dans ce cas, vous pouvez simplement ajouter « C4 : » avant « Fusionner la branche 'fonctionnalités' ». La sortie devrait ressembler à ceci :

Fusion faite par la stratégie 'récursive'.
b.txt | 0
c.txt | 0
ré.txt | 0
3 fichiers modifiés, 0 insertions(+), 0 suppressions(-)
créer le mode 100644b.SMS
créer le mode 100644 c.SMS
créer le mode 100644 d.SMS

Maintenant, si vous vérifiez l'historique, il devrait ressembler à ce qui suit :

$ git log --oneline
e071527 C4 : Fusionner les « fonctionnalités » de la branche
bb79c25 C3 : Ajout d.SMS
692bd8c C2 : Ajout de c.SMS
a0df62a C1 : Ajout de b.SMS
7575971 C0 : Ajout d'un.SMS

Vous pouvez voir que même si vous avez exactement les mêmes modifications, cette version de fusion a le commit C4 supplémentaire qui signifie la fusion de la branche de fonctionnalités dans le maître.

Conclusion

L'indicateur git merge no-ff permet de créer un historique plus lisible. Il vous permet de mettre des balises qui montrent clairement où les fusions ont eu lieu. Cela peut vous faire gagner du temps et des efforts lors du débogage.

Une étude plus approfondie:

Les références:
Tutoriel Shadow of the Tomb Raider pour Linux
Shadow of the Tomb Raider est le douzième ajout à la série Tomb Raider - une franchise de jeux d'action-aventure créée par Eidos Montréal. Le jeu a ét...
Comment booster les FPS sous Linux?
FPS signifie Images par seconde. La tâche du FPS est de mesurer la fréquence d'images dans les lectures vidéo ou les performances de jeu. En termes si...
Meilleurs jeux de laboratoire d'applications Oculus
Si vous êtes propriétaire d'un casque Oculus, vous devez être au courant du chargement latéral. Le chargement latéral est le processus d'installation ...