J'ai installé un dépôt "principal" à distance non dénudé et l'ai cloné sur mon ordinateur. J'ai apporté des modifications locales, mis à jour mon référentiel local et repoussé les modifications dans mon référentiel distant. Les choses allaient bien jusque-là.
Maintenant, je devais changer quelque chose dans le référentiel distant. Ensuite, j'ai changé quelque chose dans mon dépôt local. J'ai réalisé que la modification du référentiel distant n'était pas nécessaire. J'ai donc essayé git push
de passer de mon référentiel local à mon référentiel distant, mais j'ai eu une erreur comme:
Pour vous empêcher de perdre l'historique, les mises à jour non à avance rapide ont été rejetées. Fusionnez les modifications à distance avant de pousser à nouveau. Consultez la section «Remarque sur les avances rapides»
git push --help
pour plus de détails.
Je pensais que probablement
git push --force
forcerait ma copie locale à pousser les modifications sur la télécommande et à la rendre identique. Cela force la mise à jour , mais lorsque je reviens au référentiel distant et que je fais un commit, je remarque que les fichiers contiennent des modifications obsolètes (celles que le référentiel distant principal avait précédemment).
Comme je l'ai mentionné dans les commentaires à l'une des réponses :
[J'ai] essayé de forcer, mais en revenant au serveur maître pour enregistrer les modifications, j'obtiens une mise en scène obsolète. Ainsi, lorsque je valide les référentiels ne sont pas les mêmes. Et quand j'essaye d'utiliser à nouveau git push, j'obtiens la même erreur.
Comment puis-je résoudre ce problème?
git push --force
c'est en effet un autre moyen valable pour forcer la poussée, et poussera les branches aussi bien git push origin master --force
qu'avec la valeur par défaut de Git push.default config settings
, bien que les branches spécifiquement poussées diffèrent entre les versions de Git antérieures à 2.0 et après 2.0.
git push --force
fonctionne bien ces jours-ci, FWIW ...
git push --force-with-lease
fonctionne encore mieux :), il refusera de mettre à jour une branche sauf si c'est l'état que vous attendez. (voir developer.atlassian.com/blog/2015/04/force-with-lease )
git push -force
plus attentivement .