web-dev-qa-db-fra.com

Comment éviter l'enfer de fusion-validation sur GitHub / BitBucket

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?

82
Niklas9

Rebase des branches d'entités avant la fusion

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.

Utilisez le --ff-only Drapeau

Outre 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.

117
Todd A. Jacobs

"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

https://git-scm.com/book/en/v2/Git-Branching-Rebasing

2
Kondal Kolipaka