web-dev-qa-db-fra.com

La fusion rapide n'est pas possible. Pour fusionner cette demande, commencez par rebaser localement

Récemment, j'ai créé newbranch et créé une demande de fusion vers la branche Master. Avant que TeamLead n'accepte la demande de fusion dans la branche principale, un autre membre de l'équipe a été validé pour la même branche (newbranch). Après cela, j'ai engagé mes changements locaux et retiré les changements de newbranch à la succursale locale. Et j'ai poussé mon engagement local vers newbranch

gitlab error

Mon TeamLead m'a dit de rebaser ma branche vers une version antérieure. Et résoudre les conflits. Je ne sais plus quoi faire maintenant. Une idée?

8
SanjX

Il semble que votre GitLab soit configuré pour ne pas autoriser la fusion des branches de fonctionnalité avec des validations de fusion dans la branche master. C'est là que vous avez pris un mauvais virage:

Après cela, j'ai engagé mes changements locaux et j'ai transféré les changements dans newbranch vers la branche locale.

Ce que vous auriez dû faire est de valider votre travail, puis d'extraire via rebase de la branche distante newbranch. Pour remédier à la situation, je suggère de nuking le commit de fusion qui s'est produit lorsque vous vous êtes retiré de GitLab. Un commit de fusion est probablement ce qui s'est passé, car git pull utilise par défaut la stratégie de fusion, pas la stratégie de rebase. Vérifier git log, et voyez combien de validations ont été introduites en raison d'un tirage incorrect. En supposant qu'il n'y avait qu'un seul commit de fusion, alors ce qui suit devrait faire:

git reset --hard HEAD~1

Vérifiez à nouveau que git log semble correct. Vous ne devriez maintenant voir que votre dernier commit en haut de la branche. En supposant que vous voyez cela, alors vous pouvez tirer via rebase:

git pull --rebase Origin newbranch

Cela apportera le commit de votre collègue, puis rejouera votre dernier commit au sommet de la branche. Enfin, vous pouvez pousser la branche vers l'extérieur et le problème devrait être résolu:

git Push Origin newbranch

Notez que faire une réinitialisation matérielle comme je l'ai suggéré ci-dessus n'est généralement pas une bonne chose à faire. Mais dans votre cas, personne n'a encore vu ce commit de fusion, car GitLab a rejeté votre tentative de Push. Vous devez donc être sûr de le retirer.

2
Tim Biegeleisen

À partir de votre nouveauBranch:

git checkout master pour revenir sur la branche master

git pull Origin master pour obtenir la version la plus récente de la branche principale

git checkout newBranch pour revenir sur votre nouveauBranch

git rebase Origin/master -i pour effectuer un rebase itératif. La commande vous guidera et vous permettra de choisir des validations, de les renommer, de les écraser, etc. En supposant que vous souhaitiez les conserver toutes, elle s'arrêtera en cas de conflits de fusion et vous devrez ensuite les résoudre dans votre éditeur de texte , il vous indiquera où (dans votre éditeur de texte) les conflits se produisent. Vous devrez ajouter ces fichiers après les avoir corrigés puis faire git rebase --continue pour procéder au rebasage.

Lorsque vous avez terminé avec le rebase, votre newBranch sera synchronisé avec master et aura toutes les validations dans master qui n'étaient pas là lorsque vous avez commencé votre travail et tous les conflits de fusion seront résolus afin que vous puissiez facilement fusionner votre newBranch.

3
chevybow