web-dev-qa-db-fra.com

Comment fusionner la branche Gerrit à une autre branche Gerrit

J'utilise la version 2.4.2 de Gerrit. J'ai une branche master et j'ai créé une nouvelle branche, appelée newbranch. Ensuite, j'ai poussé quelques modifications à la télécommande (Gerrit) newbranch. Après avoir vérifié dans Gerrit, j'ai fusionné les modifications dans newbranch.

Non, je veux fusionner le newbranch en master, envoyer des mises à jour master (fusionnées avec les modifications de newbranch) et supprimer le newbranch branche.

J'ai essayé de faire ceci:

git fetch
git checkout master
git merge newbranch
git Push Origin master:refs/for/master

Mais Gerrit renvoie ce message:

 ! [remote rejected] master -> refs/for/master (no new changes)

Que devrais-je faire?

37
Alan Shen

Cette situation a été signalée comme un bogue dans Gerrit. Voici une solution/solution de contournement de suivi des problèmes de Gerrit :

À ma connaissance, vous avez actuellement 2 options -

  1. Forcer la poussée vers les références/têtes. C'est juste une avance rapide, donc en théorie tout a déjà été revu et vérifié. Il ne sert à rien de le faire à nouveau, alors il suffit de sauter ce processus et de pousser vers les références/têtes plutôt que les références/pour.

  2. Allez-y et créez un commit de fusion. Utilisez 'git merge --no-ff' - cela créera un commit de fusion même s'il n'est pas nécessaire dans votre situation d'avance rapide. Ensuite, le commit de fusion peut être téléchargé, révisé, vérifié et fusionné comme d'habitude.

Mon entreprise a tendance à opter pour l'option 2. Je fermerai ceci comme wontfix, mais si vous avez des suggestions sur la façon de faire mieux, veuillez nous le faire savoir.

34
Michael Sims

Si la fusion est une fusion à avance rapide, aucun objet n'existe pour Push to gerrit, car une avance rapide déplace simplement le pointeur de branche.

Vous devez forcer la fusion pour créer un objet en évitant une avance rapide:

git merge --no-ff
10
Sogger

Les commandes suivantes fonctionnent parfaitement.

git checkout master
git merge --no-ff newbranch

Vous pouvez enregistrer avec le message de validation par défaut. Assurez-vous que l'ID de modification a été généré. Vous pouvez utiliser la commande suivante pour vous en assurer.

git commit --amend

Poussez ensuite avec la commande suivante.

git Push Origin HEAD:refs/for/refs/heads/master

Vous pourriez rencontrer un message d'erreur comme ci-dessous.

! [remote rejected] HEAD -> refs/for/refs/heads/master (you are not allowed to upload merges)

Pour résoudre ce problème, l'administrateur du projet gerrit doit créer une autre référence dans gerrit nommée 'refs/for/refs/heads/master' ou 'refs/for/refs/heads/*' (qui couvrira toutes les branches à l'avenir). Accordez ensuite l'autorisation "Push Merge Commit" à cette référence et l'autorisation "Soumettre" si nécessaire pour soumettre le GCR.

Maintenant, essayez à nouveau la commande Push ci-dessus, et cela devrait fonctionner.

Crédits:

https://github.com/ReviewAssistant/reviewassistant/wiki/Merging-branches-in-Gerrit

https://stackoverflow.com/a/21199818/3877642

2