Nous nous retrouvons avec beaucoup de commits comme celui-ci dans notre repo:
Merge branch 'master' of bitbucket.org:user/repo
Cela se produit chaque fois qu'un développeur synchronise sa fourchette locale avec le référentiel de niveau supérieur.
Existe-t-il de toute façon pour éviter que cet enfer de fusion-validation n'encombre tous les journaux de dépôt? Peut-on les éviter lors du lancement des pull-requests d'une manière ou d'une autre?
Je sais que je peux faire git rebase si cela est fait dans mon local VM uniquement, y a-t-il une équivalence dans l'interface utilisateur GitHub/BitBucket?
Comment faites-vous les gars?
Si vous souhaitez éviter les validations de fusion, vous devez vous assurer que toutes les validations sont rapides. Pour ce faire, assurez-vous que votre branche de fonctionnalités rebase proprement sur votre ligne de développement avant une fusion comme celle-ci:
git checkout master
git checkout -b feature/foo
# make some commits
git rebase master
git checkout master
git merge --ff-only feature/foo
Rebase comporte également de nombreux indicateurs, notamment un rebasage interactif avec le -i
, mais vous n'en aurez peut-être pas besoin si vous gardez les choses aussi simples que possible et que vous souhaitez conserver tout l'historique de votre branche lors d'une fusion.
--ff-only
DrapeauOutre le rebasage, l'utilisation de --ff-only
flag garantira que seules les validations d'avance rapide sont autorisées. Un commit ne sera pas effectué s'il s'agit à la place d'un commit de fusion. La page de manuel git-merge (1) indique:
--ff-only
Refusez de fusionner et de quitter avec un état différent de zéro à moins que l'actuel HEAD soit déjà à jour ou que la fusion puisse être résolue comme une avance rapide.
"Todd A. Jacobs" déjà mentionné "rebase" est le concept ici. C'est juste une façon plus détaillée de faire les choses.
Disons que vous êtes sur la branche principale
$ git branch
* master
Vous voulez faire un correctif, alors créez un "fixbranch" qui est dérivé du maître
$ git checkout -b fixbranch
Peut-être que vous auriez travaillé quelques jours sur cette branche et que vous auriez eu quelques commits.
Le jour où vous vouliez pousser vos commits vers le référentiel maître central! Checkout master et obtenez les dernières modifications du référentiel maître central
$ git checkout master
$ git pull Origin master
Rebasez votre fixbranch avec le maître pour avoir un historique propre et résoudre les conflits éventuels dans le référentiel local lui-même.
$ git checkout fixbranch
$ git rebase master
Maintenant, fixbranch est mis à jour avec le master central, permettez-moi de fusionner fixbranch dans la branche master
$ git checkout master
$ git merge fixbranch
J'ai fini! permettez-moi de pousser le maître local vers le maître central
$ git Push Origin master