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

1voto

Le push a été rejeté car l'extrémité de votre branche actuelle est en retard.

Quand j'ai eu une telle situation, j'ai simplement exécuté :

git push -f origin main

Et c'était fait.

2 votes

git push -f écrasera les modifications en amont, et c'est techniquement correct. La plupart du temps, vous voulez ajouter vos modifications au code existant, donc ce que vous devez faire est git fetch pour obtenir ces modifications, puis git rebase origin/branchname pour rejouer vos modifications sur le dessus du code en amont. Il peut y avoir des conflits de fusion à résoudre, mais de cette manière, vous n'écrasez pas le travail de quelqu'un d'autre.

1voto

gleitonfranco Points 556

Cela dépend des autorisations.

Vous n'avez peut-être pas l'autorisation de pousser directement vers une branche principale (master, development). Si vous êtes dans un projet d'entreprise, vous devez pousser votre propre branche de sujet vers son distant et soumettre une demande de fusion (MR).

0voto

Rahul Parab Points 25

Vous devez avoir ajouté de nouveaux fichiers dans vos commits qui n'ont pas été pushés. Vérifiez le fichier, poussez ce fichier à nouveau, puis essayez de tirer/pousser.

Cela fonctionnera. Cela a fonctionné pour moi...

0voto

techloris_109 Points 341

Étant donné que la branche que j'essayais de valider était ma sous-branche sous master, je l'ai d'abord supprimée du dépôt (en raison d'un problème de référencement en arrière). J'ai ensuite réessayé avec push et ça a fonctionné à nouveau!

Note : Dans le cadre de la suppression de la branche initiale, j'ai eu toutes les modifications précédentes dans le push que je m'apprêtais à faire, donc aucun code n'a été perdu.

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