Git Rebase: définitions
Selon la documentation GIT, la commande Rebase se déroulera à l'application du dessus d'une autre pointe de base. Cette définition pourrait être un peu intimidante. Il est plus facile d'expliquer la rébase en tant que procédure qui ajoute les modifications de la branche actuelle à la queue d'une autre branche. Voyons un exemple pour avoir une meilleure idée de ce qui se passe.
Exemple de rebasing Git
Dans cet exemple, nous allons d'abord créer un cas de test avec la branche «maître» et «fonctionnalité». Ensuite, nous ferons une fusion standard. Ensuite, nous recréerons le cas de test et effectuerons la rébase et la fusion.
1. Création de branches de maître et de fonctionnalités
Voici le scénario que nous créerons:
A - b - c (maître) |
\ |
E - F (fonctionnalité) |
Dans l'exemple ci-dessus, nous prenons le chemin suivant:
Vous pouvez créer un dossier et exécuter le code suivant à l'intérieur du dossier pour créer la situation ci-dessus:
git init2. Fusion simple
Utilisons la commande de journal pour vérifier les deux branches.
Résultats pour «maître»:
$ maître de paiementRésultats pour «fonctionnalité»:
$ GIT CHECKOT FEATTOWRemarquez comment la branche des fonctionnalités n'a pas de validation C
Maintenant, exécutons la branche de fusion «fonctionnalité» avec une branche «maître». Il vous sera demandé de saisir un commentaire. Dans le commentaire, ajoutez «Commit G» »au début pour le rendre plus facile à suivre.
$ maître de paiementRésultats pour «maître»:
$ maître de paiementRésultats pour «fonctionnalité»:
$ GIT CHECKOT FEATTOWDans la succursale «maître», vous remarquerez qu'il y a un nouveau engagement qui a fusionné les modifications de la succursale «fonctionnalité». Fondamentalement, les mesures suivantes ont eu lieu:
A - b - c - g (maître)Dans le commit G, toutes les modifications de la succursale «fonctionnalité» ont été introduites dans la branche principale. Mais la succursale «fonctionnalité» elle est restée intacte en raison du processus de fusion. Remarquez le hachage de chaque engagement. Après la fusion, le commit E (7C5C85E) et F (0286690) a le même hachage sur la branche «fonctionnalité» et «maître».
3. Fusion avec rebasing
Répétons l'étape 1 pour réaliser à nouveau les branches «maître» et «fonctionnalité».
Résultats pour «maître»:
$ maître de paiementRésultats pour «fonctionnalité»:
$ GIT CHECKOT FEATTOWRebase à partir de la succursale «fonctionnalité».
$ GIT CHECKOT FEATTOWPuis fusionner la «fonctionnalité» dans «maître».
$ maître de paiementRésultats pour la branche «maître»:
$ maître de paiementRésultats de la branche «fonctionnalité»:
$ GIT CHECKOT FEATTOWNotez qu'après la rébase et la fusion, les deux branches sont les mêmes. De plus, les hachages pour E et F ont changé dans les deux branches. Fondamentalement, dans le scénario Rebase, c'est ce qui s'est produit:
A - B - CC'est pourquoi il n'y a pas de nouvel engagement. Les commits E et F ont été recalculés et verrouillés à la fin de la branche «maître».
Rebasing est un outil utile lorsque vous souhaitez nettoyer l'histoire de votre travail. Cependant, il y a un danger qui a donné naissance à la règle d'or.
Règle d'or de la rebasing
La règle d'or de la rebasing est:
Ne jamais réprimander une branche publique.
Comme vous pouvez le voir dans l'exemple ci-dessus, la rebasing recalcule les commits. Lorsque plusieurs personnes se ramifient à partir d'un référentiel public, Rebasing peut créer des situations où les développeurs qui ont créé de nouvelles succursales se heurteront à des situations de fusion très compliquées. Donc, c'est une bonne idée de ne jamais réprimander les branches publiques qui sont partagées.
En conclusion:
Rebasing est une caractéristique unique de Git. Mais utilisez-le avec prudence.
Voici quelques liens pour une étude plus approfondie: