904 votes

Les mises à jour ont été rejetées car l'extrémité de votre branche actuelle est en retard par rapport à son homologue distant

Notre flux de travail est le suivant. Nous avons une branche appelée dev que je peux atteindre à origin/dev. Lorsque nous apportons des modifications, nous créons une branche à partir de dev :

git checkout -b FixForBug origin/dev

Maintenant j'ai une branche appelée FixForBug qui suit (je pense que c'est le bon mot) origin/dev. Ainsi, si je fais un git pull, il apportera de nouvelles modifications de origin/dev ce qui est super. Maintenant, lorsque j'ai terminé ma correction, je pousse vers une branche distante portant le même nom.

Tout d'abord, je récupère toutes les modifications de origin/dev et je fais un rebase :

git pull --rebase

Ensuite, je pousse les modifications vers une branche distante portant le même nom :

git push origin FixForBug

Maintenant, il y a une branche sur le serveur distant et je peux créer une demande de fusion pour que la modification soit approuvée et fusionnée de nouveau dans la branche dev. Je ne pousse jamais quoi que ce soit vers origin/dev moi-même. Je pense que c'est un flux de travail assez courant.

La première fois que je fais un git push, ça fonctionne bien et crée la branche distante. Cependant, si je pousse une deuxième fois (disons pendant l'examen du code, quelqu'un signale un problème), je reçois l'erreur suivante :

error: failed to push some refs to 'https://github.mydomain.info/Product/product.git'
hint: Updates were rejected because the tip of your current branch is behind its remote counterpart. Integrate the remote changes (e.g. hint: 'git pull ...') before pushing again.
See the 'Note about fast-forwards' in 'git push --help' for details.

Cependant, si je fais un git status, il dit que je suis en avance de 1 commit sur origin/dev (ce qui a du sens) et si je suis le conseil et que je lance git pull, il dit que tout est à jour. Je pense que c'est parce que je pousse vers une branche différente de ma branche amont. Je peux résoudre ce problème en exécutant :

git push -f origin FixForBug

Dans ce cas, il poussera les modifications vers la branche distante, en disant (mise à jour forcée) et tout semble bon sur la branche distante.

Mes questions :

Pourquoi est-ce que -f est requis dans ce scénario ? Habituellement, lorsque vous forcez quelque chose, c'est parce que vous faisiez quelque chose de mal ou du moins contre les pratiques standard. Est-ce que je peux le faire, ou est-ce que cela va perturber quelque chose dans la branche distante ou créer des problèmes pour celui qui devra finalement fusionner mes modifications dans dev ?

5 votes

Il semble que le message que vous recevez indique que la branche distante FixForBug est en avance sur votre branche locale FixForBug. Vous devriez récupérer les changements de cette branche distante et les fusionner dans votre branche locale avant de pousser.

15 votes

@mhatch - Donc en gros exécute git pull origin FixForBug avant que je pousse là-bas? D'accord, cela a du sens. N'hésitez pas à ajouter en tant que réponse!

0 votes

Pour pousser herku si vous obtenez cette erreur, faites ceci. stackoverflow.com/a/21088381/12201407

6voto

Deepesh Nair Points 151

C'est ainsi que j'ai résolu mon problème :

Supposons que la branche amont est celle que vous avez forkée et origin est votre dépôt et que vous voulez envoyer une MR/PR à la branche amont.

Vous avez déjà, disons, environ quatre commits et vous obtenez Les mises à jour ont été rejetées car l'extrémité de votre branche actuelle est en retard.

Voici ce que j'ai fait

D'abord, regroupez tous vos quatre commits :

git rebase -i HEAD~4

Vous obtiendrez une liste de commits avec pick écrit sur eux (ouverts dans un éditeur).

Exemple

pick fda59df commit 1
pick x536897 commit 2
pick c01a668 commit 3
pick c011a77 commit 4

à

pick fda59df commit 1
squash x536897 commit 2
squash c01a668 commit 3
squash c011a77 commit 4

Après cela, vous pouvez enregistrer votre commit combiné

Suivant

Vous devrez ranger votre commit.

Voici comment :

git reset --soft HEAD~1
git stash

Rebasez maintenant avec votre branche amont :

git fetch upstream beta && git rebase upstream/beta

Récupérez maintenant votre commit rangé :

git stash pop

Validez ces changements et poussez-les :

git add -A
git commit -m "[foo] - foobar commit"
git push origin fix/#123 -f

5voto

greencheese Points 82

Si vous êtes vraiment préoccupé par d'autres approches, ces étapes peuvent vous aider sans aucune difficulté

1: Stashez vos modifications dans votre branche locale que vous souhaitez pousser

2: Renommez votre branche locale comme sauvegarde pour l'avenir

3: Créez une branche du même nom à partir de votre dépôt distant qui aura toutes les modifications

4: Consultez cette nouvelle branche comme votre nouvelle branche locale

5: Effectuez et enregistrez les modifications dans cette branche

6: Validez et poussez

4voto

Alex Reuka Points 51

M'aider ensuite :

git stash
git pull origin master
git apply
git commit -m "quelques commentaires"
git push

0 votes

Que voulez-vous dire par "M'aider ensuite" (semble incompréhensible) ? Pouvez-vous élaborer ?

1voto

HoloLady Points 1033

J'ai eu ce problème en essayant de pousser après un rebase à travers Visual Studio Code. Mon problème a été résolu en copiant simplement la commande de la fenêtre de sortie Git et en l'exécutant depuis la fenêtre du terminal dans Visual Studio Code.

Dans mon cas, la commande ressemblait à :

git push origin NomDeMaBranche:NomDeMaBranche

1voto

M.Erkan Çam Points 83

Si vous avez essayé toutes les réponses précédentes et que le problème n'est toujours pas résolu, assurez-vous que le nom de la branche poussée est unique et n'existe pas dans les dépôts distants.

Le message d'erreur pourrait être trompeur.

0 votes

Il n'y a aucune réponse liée à mon message. S'il y en avait une, alors je serais d'accord avec vous.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X