par Vali Shah

en tant que développeur, beaucoup d’entre nous doivent choisir entre Merge et Rebase. Avec toutes les références que nous obtenons d’internet, tout le monde croit « N’utilisez pas Rebase, cela pourrait causer de graves problèmes. »Ici, je vais expliquer ce que sont la fusion et le rebase, pourquoi vous devriez (et ne devriez pas) les utiliser, et comment le faire.

git Merge et git Rebase ont le même objectif. Ils sont conçus pour intégrer les changements de plusieurs branches en une seule., Bien que l’objectif final soit le même, ces deux méthodes l’atteignent de différentes manières, et il est utile de connaître la différence lorsque vous devenez un meilleur développeur de logiciels.

cette question a divisé la communauté Git. Certains croient que vous devriez toujours rebaser et d’autres que vous devriez toujours fusionner. Chaque côté a des avantages convaincants.

git Merge

La fusion est une pratique courante pour les développeurs utilisant des systèmes de contrôle de version. Que les branches soient créées pour des tests, des corrections de bugs ou pour d’autres raisons, la fusion valide les modifications vers un autre emplacement., Pour être plus précis, la fusion prend le contenu d’une branche source et les intègre à une branche cible. Dans ce processus, seule la branche cible est modifiée. L’historique de la branche source reste le même.,da2a4595a »>

Fusionner les Maître -> branche

les Pros

  • Simple et familière
  • Conserve un historique complet et dans l’ordre chronologique
  • Maintient le contexte de la branche

Cons

  • Commit l’histoire peut être pollué par beaucoup de fusion s’engage
  • Débogage à l’aide de git bisect peut devenir plus difficile

Comment faire

Fusionner la branche master dans la branche à l’aide de la balise checkout et merge commandes.,

$ git checkout feature$ git merge master(or)$ git merge master feature

cela créera un nouveau « commit de fusion” dans la branche de fonctionnalité qui contient l’historique des deux branches.

Git Rebase

Rebase est une autre façon d’intégrer les modifications d’une branche à l’autre. Rebase compresse toutes les modifications en un seul  » patch.” Puis il intègre le patch sur la branche cible.

contrairement à la fusion, le rebasage aplatit l’historique car il transfère le travail terminé d’une branche à une autre. Dans le processus, l’historique indésirable est éliminé.,

les Rebases sont la façon dont les modifications doivent passer du haut de la hiérarchie vers le bas, et les fusions sont la façon dont elles remontent vers le haut

Rebase la branche 467088d113″>

pros

  • rationalise un historique potentiellement complexe
  • manipuler un seul commit est facile (par exemple,
  • nettoie les commits intermédiaires en leur faisant un seul commit, ce qui peut être utile pour les équipes DevOps

Cons

  • réduire la fonctionnalité à une poignée de commits peut masquer le contexte
  • rebaser les référentiels publics peut être dangereux lorsque vous travaillez en équipe
  • c’est plus de travail: Utiliser rebase pour branche de fonctionnalité Mise à jour Toujours
  • rebasage avec des branches distantes vous oblige à forcer push., Le plus gros problème auquel les gens sont confrontés est qu’ils forcent push mais n’ont pas défini git push par défaut. Il en résulte des mises à jour de toutes les branches ayant le même nom, à la fois localement et à distance, et c’est terrible à gérer.

si vous rebasez incorrectement et réécrivez involontairement l’historique, cela peut entraîner de graves problèmes, alors assurez-vous de savoir ce que vous faites!

Comment faire

Rebase la branche d’entités sur la branche maître à l’aide des commandes suivantes.,

$ git checkout feature$ git rebase master

cela déplace toute la branche d’entités au-dessus de la branche principale. Pour ce faire, il réécrit l’historique du projet en créant de nouveaux commits pour chaque commit dans la branche d’origine (fonctionnalité).

Interactif Complet

Cela permet de modifier l’engage comme ils sont déplacés vers la nouvelle branche. C’est plus puissant que le rebase automatisé, car il offre un contrôle complet sur l’historique des commits de la branche. Généralement, il est utilisé pour nettoyer une histoire chaotique avant de fusionner une branche en maître.,

$ git checkout feature$ git rebase -i master

cela ouvrira l’éditeur en répertoriant tous les commits qui sont sur le point d’être déplacés.

pick 22d6d7c Commit message#1pick 44e8a9b Commit message#2pick 79f1d2h Commit message#3

Ceci définit exactement à quoi ressemblera la branche après le rebase. En réorganisant les entités, vous pouvez faire ressembler l’historique à ce que vous voulez. Par exemple, vous pouvez utiliser des commandes comme fixup, squash, edit etc, au lieu de pick.

à utiliser

Alors, quel est le meilleur?, Que recommandent les experts?

Il est difficile de généraliser et de décider sur l’un ou l’autre, puisque chaque équipe est différente. Mais nous devons commencer quelque part.

les équipes doivent prendre en compte plusieurs questions lors de la définition de leurs stratégies git rebase par rapport à merge. Parce qu’il s’avère qu’une stratégie de flux de travail n’est pas meilleure que l’autre. Elle est dépendante de votre équipe.

considérez le niveau de rebasage et de compétence Git dans votre organisation. Déterminez dans quelle mesure vous appréciez la simplicité du rebasage par rapport à la traçabilité et à l’historique de la fusion.,

enfin, les décisions de fusion et de rebasage doivent être considérées dans le contexte d’une stratégie de branchement claire (reportez-vous à cet article pour en savoir plus sur la stratégie de branchement). Une stratégie de branchement réussie est conçue autour de l’organisation de vos équipes.

Ce que je recommande?

Au fur et à mesure que l’équipe grandit, il deviendra difficile de gérer ou de suivre les changements de développement avec une politique toujours fusionner. Pour avoir un historique de commit propre et compréhensible, l’utilisation de Rebase est raisonnable et efficace.,

en tenant compte des circonstances et des directives suivantes, Vous pouvez tirer le meilleur parti de Rebase:

  • vous développez localement: si vous n’avez partagé votre travail avec personne d’autre. À ce stade, vous devriez préférer le rebasage à la fusion pour garder votre historique bien rangé. Si vous avez votre fork personnel du référentiel et que celui-ci n’est pas partagé avec d’autres développeurs, vous pouvez rebaser même après avoir poussé vers votre branche.
  • votre code est prêt à être examiné: Vous avez créé une pull request. D’autres examinent votre travail et le récupèrent potentiellement dans leur fourchette pour un examen local., À ce stade, vous ne devriez pas rebaser votre travail. Vous devez créer des commits ‘rework’ et mettre à jour votre branche de fonctionnalités. Cela aide à la traçabilité dans la demande de traction et empêche la rupture accidentelle de l’historique.
  • L’examen est fait et prêt à être intégré dans la branche cible. Bravo! Vous êtes sur le point de supprimer votre branche. Étant donné que les autres développeurs ne seront pas fetch-fusion dans ces changements à partir de ce moment, c’est votre chance d’assainir votre historique., À ce stade, vous pouvez réécrire l’historique et plier les commits d’origine et ceux embêtants ‘PR rework’ et ‘merge’ commits dans un petit ensemble de commits ciblés. La création d’une fusion explicite pour ces commits est facultative, mais a de la valeur. Il enregistre lorsque la fonctionnalité est passée à master.

Conclusion

j’espère que cette explication a donné quelques indications sur Git merge et Git rebase. La stratégie de fusion vs rebase est toujours discutable. Mais peut-être que cet article aidera à dissiper vos doutes et vous permettra d’adopter une approche qui fonctionne pour votre équipe.