Différence entre Git ReBase et Merge

Dans cet article, nous allons discuter de deux de ces outils Rebase et Merge et leur différence. GIT est l'un des contrôleurs de version distribués DVCS les plus couramment utilisés parmi les programmeurs en raison de sa nature dynamique et de la grande disponibilité des outils pour gérer les versions. Il existe deux façons d'envoyer nos modifications d'une branche à une autre. L'un est en utilisant Rebase et l'autre est Merge qui est assez populaire. Ci-dessous, nous apprenons la meilleure comparaison entre Git ReBase et Merge.

Comparaison directe entre Git ReBase et Merge (infographie)

Voici les 5 meilleures comparaisons entre Git ReBase et Merge:

Différences clés entre Git ReBase et Merge

Discutons de la principale différence entre Git ReBase et Merge:

1. Git Rebase

Git Rebase commence son travail à partir d'un commit commun entre les deux branches. Master et fonctionnalité, à partir de là, il compare les deux et capture l'instantané de la différence qui se fait dans l'une des branches, puis l'ajoute à d'autres. Voyons cela avec les captures d'écran ci-dessous.

Imaginons que nous ayons une branche principale et que nous nous y engagions en dernier m2, comme indiqué dans la capture d'écran ci-dessus. À partir de ce commit, nous créons une branche de fonctionnalité et nous avons fait quelques modifications et validés avec le message f1. Considérons maintenant que quelqu'un a fusionné son travail avec master et maintenant le dernier commit du master est m3, pas m2 comme indiqué ci-dessous.

Et nous continuons également à travailler sur la branche de fonctionnalité pour ajouter son dernier commit à être f2 comme indiqué ci-dessous.

Comme vu ci-dessus, nous avons maîtrisé le dernier m3 de commit et nous avons une fonctionnalité qui n'est pas à jour avec le master car elle a été créée à partir de l'instantané de commit m2 qui a le dernier commit en tant que f3. Maintenant, pour combiner ces efforts avec le maître pour générer est indiqué ci-dessous.

Maintenant, nous devons intégrer les changements ci-dessus qui peuvent être effectués de deux manières, l'une avec fusion et l'autre avec rebase. Nous verrons ici comment intégrer avec rebase.

$ git checkout feature
Switched to a new branch 'feature'
$ git rebase master

A partir de la commande rebase ci-dessus, nous allons essayer de rechercher un commit commun à la fois du maître et de la fonctionnalité et dans ce cas, il s'agit de m2. Et puis, puisque nous devons rebaser master, il recherchera les ajouts qui ont été faits avec master et prendra un instantané m3 et rebasera la fonctionnalité de m2 en m3. Nous avons donc maintenant une fonction avec m3 (au lieu de m2), f1, f2 commits. Maintenant, je peux demander de rebaser sur la fonctionnalité pour mettre à jour la branche principale avec les modifications de la fonctionnalité. Une chose à retenir est que tout changement de maître doit être audité. Ici, je montre juste à titre d'exemple.

$ git checkout master
Switched to a new branch 'master'
$ git rebase feature

Maintenant, dans ce document, nous appliquerons la dernière branche de la fonction de validation qui est f2 au maître et le dernier instantané de validation du maître sera f2. Vous pouvez lister les commits en utilisant la commande git log mais nous devons d'abord vérifier dans quelle branche nous devons voir le journal comme ci-dessous.

$ git checkout feature
Switched to a new branch 'feature'
$ git log

Maintenant, avec rebase, nous avons intégré les mises à jour d'une fonctionnalité à maîtriser. Essayons d’y parvenir par fusion.

2. Git Merge

Nous utiliserons également la capture d'écran ci-dessus pour la référence ici, et nous pouvons obtenir la même chose que ce que nous avons réalisé avec le rebase et la fusion.

Git merge valide le dernier commit que nous avions dans la branche de fonctionnalité et ici, c'est avec f2 commit, qui rassemble toutes les modifications et le fusionne avec le dernier commit que nous avons dans la branche master, m3 ici. Cela semble compliqué mais peut être facilement effectué par la commande de fusion. Nous pouvons faire une fusion directe ou une fusion de squash et la différence dans les deux.

$ git checkout master
Switched to a new branch 'master'
$ git merge feature

La commande ci-dessus prendra toutes les validations de fonctionnalité et ajoutera également le journal du maître. Pour éviter cela on peut utiliser du squash pour que dans le log du master on fasse après m3 un seul commit et c'est de mise à jour

$ git checkout master
Switched to a new branch 'master'
$ git merge –squash feature

il faut être prudent lors de l'utilisation de git rebase et essayer de l'éviter. La règle d'or est de l'éviter en utilisant des branches publiques.


Regardez simplement le scénario ci-dessus. Cela peut se produire lorsque vous essayez de rebaser master au-dessus de votre branche de fonctionnalité et que notre branche master est publique, maintenant la branche master est mise à jour mais tout le monde travaille sur une ancienne version de master. Étant donné que le rebasage entraînera de nouveaux commits, git peut penser que l'histoire de la branche principale a divergé de tout le monde. La seule façon de résoudre ce problème sera de synchroniser à la fois le maître en les fusionnant à nouveau et d'avoir un ensemble de validations résultant qui sera source de confusion.

Tableau de comparaison de Git ReBase vs Merge

Le tableau ci-dessous résume les comparaisons entre Git ReBase et Merge:

Base de comparaison entre Rebase vs Merge Rebase Fusionner
S'engageIl modifie et réécrit l'historique en créant un nouveau commit pour chaque commit dans la branche source.Il incorpore toutes les modifications apportées à la source mais conserve l'ascendance de chaque historique de validation. Il intègre toutes les modifications apportées à la source mais conserve l'ascendance de chaque historique de validation.
SélectionIci, nous vérifions d'abord la branche qui doit être rebasée, puis sélectionnez la commande rebase
pour ajouter des mises à jour à d'autres.
Ici, vérifiez d'abord la branche qui doit être fusionnée en premier. Effectuez ensuite l'opération de fusion et la dernière validation de la source
sera fusionné avec le dernier commit du maître.
Gestion des conflitsÉtant donné que l'historique des validations sera réécrit pour comprendre le conflit sera difficile à
certains cas.
Le conflit de fusion peut être facilement géré en comprenant l'erreur qui a été effectuée lors de la fusion.
règle d'orDoit être utilisé sur les branches publiques, car l'historique des validations peut être source de confusion.Pas beaucoup de mal lors de l'exécution des branches publiques.
AccessibilitéLes validations qui étaient jadis accessibles ne seront plus accessibles après le rebase car l'historique des validations est modifié.

Les engagements resteront accessibles
des branches source.

Conclusion

Merge et Rebase sont deux outils puissants de Git et les deux sont utilisés pour incorporer les modifications aux branches, mais nous devons être un peu prudents avec rebase car cela réécrira l'historique des validations et les utiliser sur les branches publiques peut entraver le travail d'autres leur causant de la confusion. Alors que vous pouvez utiliser l'option de fusion car ses validations sont accessibles à partir de la branche source et peuvent facilement résoudre les conflits de fusion si nous avons une bonne compréhension.

Articles recommandés

Ceci est un guide pour la différence entre Git ReBase et Merge. Ici, nous discutons également des principales différences entre Git ReBase et Merge avec des infographies et un tableau de comparaison. Vous pouvez également consulter les articles suivants pour en savoir plus -

  1. Git Fetch vs Git Pull - Les principales différences
  2. Abstraction vs encapsulation | Comparaison des 6 meilleurs
  3. Architecture HBase avec avantages
  4. D'entretiens chez GIT | Top 11
  5. Système de contrôle de version GIT
  6. Git Push
  7. Encapsulation en JavaScript
  8. Guide complet de la commande à distance Git
  9. Trois étapes du cycle de vie de Git avec le workflow
  10. Comment utiliser GIT Cherry-pick avec l'exemple?