Les mises à jour ont été rejetées parce que la pointe de votre branche courante est derrière

Je suis nouveau sur Git, donc n'hésitez pas à me traiter comme un débutant.

Notre flux de travail est telle. Nous avons une branche appelée dev que je peux atteindre à origin/dev. Quand nous faisons des changements, nous avons créer une branche de dev:

git checkout -b FixForBug origine/dev

Maintenant, j'ai une branche appelée FixForBug qui est suivi (je pense que c'est le bon mot) origin/dev. Donc, si je fais un git pull il va apporter de nouvelles modifications de origin/dev qui est grand. Maintenant, quand j'en ai fini avec ma correction, j'ai pousser à une branche distante appelée la même chose.

D'abord j'ai tirer vers le bas tous les changements de origin/dev et faire un rebase:

git pull --rebase

Puis-je pousser les modifications d'une branche distante du même nom:

git push origin FixForBug

Maintenant, il y a une branche sur le serveur distant et je peux créer une pull request pour que le changement est approuvé et fusionnées dans la branche dev. Je n'ai pas jamais pousser quelque chose à origin/dev moi-même. Je devine que c'est aussi assez fréquent.

La première fois que je fais un git push, il fonctionne très bien et crée la branche distante. Cependant, si je pousse un deuxième temps (disons que les cours de code d'examen, quelqu'un fait remarquer un problème), j'obtiens l'erreur suivante:

erreur: impossible de pousser des refs à
'https://github.limeade.info/Limeade/product.git"astuce: les Mises à jour ont été
rejetée parce que la pointe de votre branche courante est derrière indice: son
homologue distant. Intégrer les modifications distantes (par ex. indication: "git pull
... ") avant de pousser à nouveau. astuce: Voir la Note sur les fast-avants'
dans 'git push --help" pour plus de détails.

Cependant, si je fais un git status il dit que je suis en avance de origin/dev par 1 commit (logique) et si j'ai suivi l'astuce et l'exécuter git pull, il dit que tout est à jour. Je pense c'est parce que je suis en le poussant vers une branche différente de celle de mon en amont de la branche. Je peux résoudre ce problème en exécutant:

git push -f origin FixForBug

Dans ce cas, elle va pousser les modifications de la branche distante, en disant (forcé la mise à jour) et tout apparaît à être bon sur la branche distante.

Mes Questions:

Pourquoi est -f requise dans ce scénario? Habituellement, lorsque vous êtes forcer quelque chose, c'est parce que vous faites quelque chose de mal, ou au moins par rapport aux normes de pratique. Je suis ok de faire ceci, ou cela est-il loupé quelque chose dans la distance de la succursale ou de créer un tracas pour celui qui l'a finalement fusionner mes trucs en dev?

Il semble que le message que vous obtenez est à dire que la branche distante FixForBug est en avance de votre succursale locale FixForBug. Vous devez tirer vers le bas les changements de distance de la branche et de les fusionner dans votre succursale locale avant de le pousser.
Donc, fondamentalement exécuter git pull origin FixForBug avant de me pousser pour que? Ok ça a du sens. N'hésitez pas à ajouter une réponse!

OriginalL'auteur Mike Christensen | 2016-09-08