Dans cet article, je vais parler du fonctionnement de Git Rebase, des différences entre Git Rebase et Git Merge, et comment travailler avec Git Rebase. Alors, commençons.
Disons, vous avez un référentiel Git avec les validations UN, B, C dans le maître bifurquer. Ensuite, vous avez créé une nouvelle branche quelque peu de branch et ajouté 2 nouveaux commits D et E au quelque peu de branch bifurquer.
Fig 1: Historique des engagements initiaux.
Maintenant, disons, vous avez oublié d'ajouter quelque chose dans le maître bifurquer. Alors, tu retournes au maître branche et ajouter un nouvel engagement g au maître bifurquer. Votre histoire Git devrait sembler comme suit.
Fig 2: Commissez l'historique après avoir ajouté Commit G dans la branche maîtresse.
Tout a l'air bien. Maintenant, si vous vouliez toutes les modifications que vous avez apportées au quelque peu de branch branche pour être dans le maître branche, vous pouvez fusionner le quelque peu de branch branche au maître bifurquer. C'est ce que Git fusionner faire.
Et si tu veux le validation g être disponible dans le quelque peu de branch bifurquer? Eh bien, vous pouvez utiliser Git Rebase pour cela.
De l'histoire de la validation de la figure 2, vous pouvez voir que la branche quelque peu de branch commence à partir du commit C. Si vous faites un Git Rebase sur quelque peu de branch, Ensuite, ça commencerait de la commission g Comme le montre la figure 3 ci-dessous. Notez que, le contenu de l'engagement D et E changera aussi bien après l'opération de rebase. Les commits D et E inclura les changements de validation g. C'est pourquoi j'ai ajouté * symbole avant les commits D et E.
Si vous voulez savoir à quoi ressemblerait l'histoire de la validation si je la fusionnais, jetez un œil à la figure 4. Je l'ai inclus juste pour pouvoir le comparer avec Git Rebase.
Fig 4: Commissez l'histoire si Git Merge était utilisé.
Maintenant que vous savez ce qu'est Git Rebase, la différence entre Git Rebase et Git Merge et pourquoi Git Rebase It utilisé, je vais vous montrer comment l'utiliser dans la section suivante de cet article ci-dessous.
Git Rebase Workflow:
Dans cette section, je vais créer un nouveau référentiel Git sur mon ordinateur local et vous montrer comment Git Rebase fonctionne. Je vous recommande d'avoir une bonne compréhension de Git Rebase avant de l'appliquer sur votre projet.
Tout d'abord, créez un nouveau référentiel GIT Rebase-Demo / sur votre ordinateur comme suit:
$ git init enbase-Demo
Maintenant, accédez à la Rebase-Demo / Répertoire comme suit:
$ CD Rebase-Demo /
Maintenant, créez un nouveau fichier test.SMS comme suit:
$ Echo "A"> Test.SMS
Le test.Le fichier txt ne contient qu'une seule ligne UN. Disons que c'est votre code de projet initial.
Maintenant, engagez les changements comme suit:
$ git add .
$ git commit -m 'a'
Maintenant, ajoutez une autre ligne B au test.SMS fichier comme indiqué dans la capture d'écran ci-dessous.
Maintenant, engagez les changements comme suit:
$ git add .
$ git commit -m 'b'
Maintenant, ajoutons une autre ligne C au test.SMS déposer.
En outre, commettez les modifications comme suit:
$ git add .
$ git commit -m 'c'
Maintenant, l'histoire de la branche de la maîtrise devrait ressembler comme suit:
$ Git Log --Oneline
Maintenant, disons, vous avez de nouvelles idées que vous voulez essayer. Alors, créons et passons à une nouvelle branche nouvelle fonctionnalité comme suit:
$ Git Checkout -B Nouveau-fonctionnement
Maintenant, ajoutez votre nouvelle idée (la ligne D disons) au test.SMS déposer.
Maintenant, engagez les changements comme suit:
$ git add .
$ git commit -m 'd'
Maintenant, ajoutez la ligne E au test.SMS déposer.
Commettre les modifications comme suit:
$ git add .
$ git commit -m 'e'
Maintenant, la validation de l'histoire du nouvelle fonctionnalité La branche doit ressembler à la suivante:
$ Git Log --Oneline
Voyez comment les commits sont dans l'ordre < B < C < D < E?
Maintenant, vous vous souvenez que vous avez oublié d'ajouter quelque chose au maître branche que vous vouliez aussi être dans le nouvelle fonctionnalité bifurquer! Alors, vérifiez au maître bifurquer.
J'ai ajouté une nouvelle ligne à la fin du test.SMS fichier comme vous pouvez le voir.
Maintenant, engagez les changements comme suit:
$ git add .
$ git commit -m 'g'
Maintenant, la validation de l'histoire du maître La branche devrait ressembler à ceci.
UN < B < C < G
Maintenant, pour réprimander les commits du maître branche au nouvelle fonctionnalité branche, première vérification au nouvelle fonctionnalité bifurquer.
$ git Checkout Nouveau-fonctionnement
Maintenant, faites une rebase git du maître Branche comme suit:
$ Git Rebase Master
Certains fusionnent les conflits! Fixons ça.
Eh bien, les modifications que j'ai apportées au commit g et D sont conflictuels les uns avec les autres. Je veux garder ces deux.
Après avoir réparé le conflit de fusion, le test.SMS Le fichier doit ressembler comme suit:
Maintenant, ajoutez les modifications à la zone de mise en scène comme suit:
$ git add .
Maintenant, continuez le fonctionnement de la Rebase comme suit:
$ Git Rebase - Continuation
Un autre conflit de fusion! Eh bien, cela peut arriver. Rebase change l'histoire de Git Commit. Donc, des choses comme celle-ci sont attendues.
Il semble que le processus de fusion a échoué en raison de certaines lignes vides. Fixons ça.
Après avoir réparé le conflit de fusion, le test.SMS Le fichier doit ressembler à ce qui suit.
Maintenant, ajoutez les modifications à la zone de mise en scène comme suit:
$ git add .
Maintenant, continuez l'opération Rebase comme suit:
$ Git Rebase - Continuation
Git Rebase est complet.
Comme vous pouvez le voir, l'historique des engagements de la nouvelle branche est mis à jour. Maintenant, l'histoire de la validation est la suivante:
UN < B < C < G < D < E
Tout comme prévu.
Le final test.SMS Le fichier doit ressembler à ce qui suit.
Git Rebase est un outil puissant. Mais, vous ne devriez jamais l'utiliser sur les référentiels Git partagés. Utilisez-le uniquement sur les référentiels Git que vous travaillez uniquement. Sinon, vous rencontrerez beaucoup de problèmes en cours de route.
Donc, c'est ainsi que vous utilisez Git Rebase. Merci d'avoir lu cet article.