Option GIT MERGE -NO-FF

Option GIT MERGE -NO-FF

Comprendre l'option Git Merge No-FF

La capacité de fusion facile de Git est l'une de ses forces. Lors d'une fusion, Git utilise la fusion rapide lorsqu'elle remarque que la tête de la branche actuelle est un ancêtre de l'engagement que vous essayez de fusionner. Dans une fusion rapide, il n'y a pas de nouvel engagement. Git déplace juste le pointeur. Si ce comportement n'est pas souhaitable, vous pouvez utiliser l'indicateur No-FF pour créer un nouvel engagement pour la fusion.

À quoi ressemble la fusion avec et sans avance rapide

Après une avance rapide, votre histoire Git ressemblera à ceci:

C0 -> C1 -> C2-> C3

Pour le même nombre de commits, voici une histoire de fusion sans avance rapide:

Dans le premier cas, il n'y a aucune indication qu'il y a eu une branche. Dans le deuxième cas, l'histoire montre un engagement C4 à indiquer où la fusion s'est produite.

Marcher à travers 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 my_project
$ cd my_project
$ git init
$ toucher un.SMS
$ git add -a
$ git commit -m "c0: ajout d'un.SMS"

Créons maintenant une branche appelée fonctionnalités et engageons quelques modifications:

$ Fonctionnalités de la succursale Git
$ fonctionnalités de paiement
$ touch b.SMS
$ git add -a
$ git commit -m "c1: ajout b.SMS"
$ touch c.SMS
$ git add -a
$ git commit -m "c2: ajout c.SMS"
$ touch d.SMS
$ git add -a
$ git commit -m "c3: ajout d.SMS"

Section2: fusionner avec une avance rapide

Revenons à Master Branch et fusionnez la branche des fonctionnalités:

$ maître de paiement
$ git fusiter les fonctionnalités

Sortir:

Mise à jour du 08076FB… 9EE88EB
Avance rapide
b.txt | 0
c.txt | 0
d.txt | 0
3 fichiers modifiés, 0 insertions (+), 0 suppressions (-)
Créer le mode 100644 b.SMS
Créer le mode 100644 C.SMS
Créer le mode 100644 D.SMS

Si vous vérifiez l'histoire, vous verrez:

$ Git Log --Oneline
9EE88EB C3: Ajout de D.SMS
C72B92C C2: Ajout de C.SMS
2E4039E C1: Ajout de b.SMS
08076FB C0: Ajout d'un.SMS

Ainsi, tous les engins de la branche des fonctionnalités se trouvent maintenant dans la branche maîtresse. Si vous continuez à apporter des modifications à Master, il n'y a aucun moyen de savoir quand la branche des fonctionnalités a été fusionnée dedans.

Section 3: Sans rapide

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

Ensuite, essayez une fusion sans l'avance rapide:

$ maître de paiement
$ git Merge --to-fant la fonctionnalité

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

Fusion de la succursale «fonctionnalités»
# 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 de sujet.
#
# Les lignes commençant par '#' seront ignorées, et un message vide abandonne
# le commit.

Modifier les commentaires. Dans ce cas, vous pouvez simplement ajouter «C4»: «Avant« Merge Branch 'Fonctionnalités »». La sortie doit ressembler à ceci:

Fusionner la stratégie «récursive».
b.txt | 0
c.txt | 0
d.txt | 0
3 fichiers modifiés, 0 insertions (+), 0 suppressions (-)
Créer le mode 100644 b.SMS
Créer le mode 100644 C.SMS
Créer le mode 100644 D.SMS

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

$ Git Log --Oneline
E071527 C4: Merge Branch 'Fonctionnalités'
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 Merge a le commit C4 supplémentaire qui signifie la fusion de la branche des fonctionnalités dans Master.

Conclusion

Le drapeau Git Merge No-FF aide à créer un historique plus lisible. Il vous permet de mettre des balises qui montrent clairement où les fusions se sont produites. Cela peut vous faire gagner du temps et des efforts pendant le débogage.

Une étude plus approfondie:

  • https: // git-scm.com / docs / git-merge
Les références:
  • Stack Overflow: What-the-Différence-Between-git-Merge et Git-Merge-No-FF
  • https: // www.atlassien.com / git / tutoriels / using-branches / git-merge