Combiner plusieurs engagements en un seul avant de pousser

Cette question concerne non seulement la manière d’accomplir cette tâche, mais s’il s’agit d’une bonne ou d’une mauvaise pratique avec Git.

Considérez que localement je fais le plus de travail sur la twig principale, mais j’ai créé une twig d’actualité que j’appellerai “topical_xFeature”. En travaillant sur “topical_xFeature” et en effectuant d’autres tâches sur la twig master, il s’avère que j’ai fait plus d’un commit sur la twig “topical_xFeature”, mais entre chaque validation, je n’ai pas fait pousser.

Tout d’abord , considérez-vous cette mauvaise pratique? Ne serait-il pas plus sage de restr avec un commit par twig par push? Dans quels cas serait-il bon d’avoir plusieurs commits sur une twig avant qu’une poussée soit faite?

Deuxièmement , comment dois-je accomplir le plus possible en apportant les commits multiples sur la twig topical_xFeature dans la twig principale pour un push? Est-ce une gêne de ne pas s’en préoccuper et de faire le push là où plusieurs commits sont poussés, ou est-ce moins agaçant de fusionner les commits en un seul et de pousser? Encore une fois, comment faire cela?

    Pour votre première question, non, il n’y a rien de mal à pousser plusieurs commits à la fois. Bien souvent, vous pouvez diviser votre travail en quelques petits commits logiques, mais ne les relevez qu’une fois que vous avez l’impression que toute la série est prête. Ou vous pouvez faire plusieurs commits localement lorsque vous êtes déconnecté, et vous les poussez tous une fois que vous êtes connecté à nouveau. Il n’y a aucune raison de se limiter à un seul engagement par poussée.

    Je trouve généralement que c’est une bonne idée de garder chaque engagement comme un seul changement logique et cohérent, qui inclut tout ce dont il a besoin pour fonctionner (il ne laisse donc pas votre code dans un état cassé). Si vous avez deux commits, mais que le code serait rompu si vous n’appliquiez que le premier, il serait peut-être judicieux d’écraser le deuxième commit dans le premier. Mais si vous avez deux commits où chacun fait un changement raisonnable, les pousser en tant que commits séparés est une bonne chose.

    Si vous voulez écraser plusieurs commits ensemble, vous pouvez utiliser git rebase -i . Si vous êtes sur la twig topical_xFeature , vous devez exécuter git rebase -i master . Cela ouvrira une fenêtre d’éditeur, avec un tas de commits listés préfixés par un pick . Vous pouvez changer tous sauf le premier à squash , ce qui indiquera à Git de garder tous ces changements, mais les écraser dans le premier commit. Après avoir fait cela, extrayez le fichier master et fusionnez dans votre twig d’entités:

     git checkout topical_xFeature git rebase -i master git checkout master git merge topical_xFeature 

    Alternativement, si vous voulez juste écraser tout dans topical_xFeature dans master , vous pouvez simplement faire ce qui suit:

     git checkout master git merge --squash topical_xFeature git commit 

    Celui que vous choisissez est à vous. Généralement, je ne craindrais pas d’avoir plusieurs petits commits, mais parfois vous ne voulez pas vous soucier de commits mineurs, vous les écrasez en un seul.

    C’est ce que je suis généralement en train de suivre pour combiner plusieurs commits en un seul commit avant de pousser le code.

    Pour ce faire, je vous suggère d’utiliser le concept de « squash » fourni par GIT.

    Suivez les étapes ci-dessous.

    1) git rebase -i

    ouvrez l’éditeur interactif rebase, où il affichera tous vos commits. Fondamentalement, vous devez identifier les validations que vous souhaitez fusionner en un seul commit.

    Imaginez que ce sont vos commits et que vous ayez montré quelque chose comme cela dans l’éditeur.

     pick f7f3f6d changed my name a bit pick 310154e updated README formatting and added blame pick a5f4a0d added cat-file 

    Il est important de noter que ces commits sont listés dans l’ordre inverse de celui que vous voyez normalement en utilisant la commande log.Means, l’ancien commit sera affiché en premier.

    2) Modifiez “choisir” pour “écraser” pour les dernières modifications validées. quelque chose comme montré ci-dessous. En faisant cela, vos 2 derniers commits seront fusionnés avec le premier.

     pick f7f3f6d changed my name a bit squash 310154e updated README formatting and added blame squash a5f4a0d added cat-file 

    pour l’édition, utilisez “i”, cela permettra à l’éditeur de l’insérer.

    3) Maintenant, enregistrez l’éditeur avec la commande suivante. : wq

    Lorsque vous sauvegardez cela, vous avez un seul commit qui introduit les modifications des trois commits précédents.

    J’espère que ceci vous aidera..

    Tout d’abord : rien ne vous dit de ne faire qu’un seul commit par twig par push: un push est un mécanisme de publication vous permettant de publier un historique local (une collection de commits) sur un repo distant.

    Deuxièmement : une git merge --no-ff topical_xFeature enregistrerait sur le master comme un seul commit votre travail de sujet, avant de pousser le master .
    (De cette façon, vous gardez topical_xFeature autour des évolutions futures, que vous pouvez enregistrer sur un master tant que nouveau commit unique lors de la fusion suivante –no-ff.
    Si se débarrasser de topical_xFeature est l’objective, alors git merge --squash est la bonne option, comme détaillé dans la réponse de Brian Campbell .

    Passez à la twig principale et assurez-vous d’être à jour.

     git checkout master 

    git fetch cela peut être nécessaire (en fonction de votre configuration git) pour recevoir des mises à jour sur l’origine / maître

     git pull 

    Fusionnez la twig d’entités dans la twig principale.

     git merge feature_branch 

    Réinitialiser la twig principale à l’état d’origine.

     git reset origin/master 

    Git considère désormais tous les changements comme des changements non planifiés. Nous pouvons append ces modifications en une seule fois. Ajouter . appenda également des fichiers non suivis.

     git add --all git commit 

    Réf: https://makandracards.com/makandra/527-squash-several-git-commits-into-a-single-commit