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
7 votes
La question la plus copiée de Stack Overflow en texte brut...
0 votes
@PeterMortensen Haha, clairement je devrais gagner un prix de quelque sorte!