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?
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
Vous devez vous connecter pour publier un commentaire.
La
-f
est réellement nécessaire en raison de la rebase. Chaque fois que vous faire un rebase vous auriez besoin de faire une force de pousser car la distance ne peut pas être rapidement transmis à votre validation. Vous auriez toujours voulez vous assurer que vous faire un pull avant de le pousser, mais si vous n'aimez pas la force de pousser à la maîtrise ou dev pour cette question, vous pouvez créer une nouvelle branche pour le pousser à, puis de fusionner ou de faire une PR.OriginalL'auteur Keif Kraken
À assurez-vous que votre succursale locale FixForBug n'est pas à l'avance de la branche distante FixForBug de traction et de fusionner les modifications avant de le pousser.
OriginalL'auteur mhatch
Si vous voulez éviter d'avoir à utiliser
-f
, alors vous pouvez simplement utiliserau lieu de
La non-rebase va chercher les changements de
origin/dev
et de fusion dans votreFixForBug
branche. Ensuite, vous serez en mesure d'exécutersans l'aide de
-f
.Ok, puis suivez la procédure documentée de cours. À partir de ce que vous décrivez, vous aurez besoin d'utiliser
-f
parce que vous êtes remplacer commit(s) sur l'amont du référentiel avec différents de ceux qui ont une autre (rebased) de l'histoire. Si vous deviez utiliser un produit tel que le Gerrit ensuite, il prend en charge ce genre de rebasage code d'examen de flux de travail sans avoir à utiliser-f
lors de la poussée. Nous utilisons Gerrit à travailler de cette façon et ça fonctionne très bien.OriginalL'auteur Greg Hewgill