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.
Tout d'abord, vous pouvez créer le référentiel GIT avec les étapes suivantes:
$ mkdir my_projectCréons maintenant une branche appelée fonctionnalités et engageons quelques modifications:
$ Fonctionnalités de la succursale GitRevenons à Master Branch et fusionnez la branche des fonctionnalités:
$ maître de paiement
$ git fusiter les fonctionnalités
Sortir:
Mise à jour du 08076FB… 9EE88EBSi vous vérifiez l'histoire, vous verrez:
$ Git Log --OnelineAinsi, 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.
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».Maintenant, si vous vérifiez l'histoire, cela devrait ressembler à ce qui suit:
$ Git Log --OnelineVous 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.