Je suis nouveau sur Git, alors n'hésitez pas à me traiter comme un débutant.
Notre flux de travail est tel. Nous avons une succursale appelée à dev
laquelle je peux accéder origin/dev
. Lorsque nous apportons des modifications, nous créons une branche de développement:
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
cela apportera de nouveaux changements, origin/dev
ce qui est formidable. Maintenant, quand j'ai fini avec mon correctif, je pousse vers une branche distante appelée la même chose.
Tout d'abord, je tire vers le bas toutes les modifications origin/dev
et je fais un rebase:
git pull --rebase
Ensuite, je pousse les modifications vers 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 demande d'extraction pour que ce changement soit approuvé et fusionné dans la branche de développement. Je ne me pousse jamais rien origin/dev
. Je suppose que c'est un flux de travail assez courant.
La première fois que je fais un git push
, cela fonctionne bien et crée la branche distante. Cependant, si je pousse une deuxième fois (disons lors de la révision du code, quelqu'un signale un problème), j'obtiens l'erreur suivante:
erreur: échec de l'envoi de certaines références vers ' https://github.limeade.info/Limeade/product.git ' indice: les mises à jour ont été rejetées car la pointe de votre branche actuelle est derrière indice: son homologue distant. Intégrez les modifications distantes (par exemple indice: 'git pull ...') avant de pousser à nouveau. astuce: Voir la 'Remarque sur les avancées rapides' dans 'git push --help' pour plus de détails.
Cependant, si je fais un, git status
cela dit que je suis en avance de origin/dev
1 commit (ce qui a du sens) et si je suis l'indice et que je cours git pull
, cela dit que tout est à jour. Je pense que c'est parce que je pousse vers une branche différente de ma branche en amont. Je peux résoudre ce problème en exécutant:
git push -f origin FixForBug
Dans ce cas, il transmettra les modifications à la branche distante, en disant (mise à jour forcée) et tout semble aller bien sur la branche distante.
Mes questions:
Pourquoi est -f
requis dans ce scénario? Habituellement, lorsque vous forcez quelque chose, c'est parce que vous avez fait quelque chose de mal ou du moins contre la pratique courante. Est-ce que je vais bien faire cela, ou est-ce que cela va gâcher quelque chose dans la branche distante ou créer des tracas pour quiconque doit éventuellement fusionner mes éléments dans le développement?
git pull origin FixForBug
avant de pousser vers ça? Ok, ça a du sens. N'hésitez pas à ajouter comme réponse!