J’ai mis en place un dépôt distant non dénudé et l’ai cloné sur mon ordinateur. J'ai effectué quelques modifications locales, mis à jour mon dépôt local, et poussé les modifications vers mon dépôt distant. Tout allait bien jusqu'à ce moment-là.
Maintenant, je devais modifier quelque chose dans le dépôt distant. Puis j'ai modifié quelque chose dans mon dépôt local. J'ai réalisé que la modification dans le repo distant n'était pas nécessaire. J'ai donc essayé de git push
de mon repo local vers mon repo distant, mais j'ai eu une erreur du genre :
Pour vous éviter de perdre l'historique, les mises à jour non rapides ont été rejeté Fusionnez les changements distants avant de pousser à nouveau. Voir la 'Note about fast-forwards' ; section of
git push --help
for details.
Je pensais que probablement un
git push --force
forcerait ma copie locale à pousser les changements vers la copie distante et la rendrait identique. Il force effectivement la mise à jour, mais lorsque je retourne au repo distant et que je fais un commit, je remarque que les fichiers contiennent des changements périmés (ceux que le repo distant principal avait précédemment).
Comme je l'ai mentionné dans les [commentaires sur l'une des réponses] (https://stackoverflow.com/questions/5509543/how-do-i-properly-force-a-git-push#comment6275726_5509588) :
[J'ai] essayé de forcer, mais lorsque je retourne sur le serveur principal pour enregistrer les modifications, j'obtiens des mises à jour périmées. Ainsi, lorsque je commite, les dépôts ne sont pas les mêmes. Et quand j'essaie d'utiliser à nouveau git push, j'obtiens la même erreur.
Comment puis-je résoudre ce problème ?
Fais-le :
git push origin <your_branch_name> --force
ou si vous avez un repo spécifique :
git push https://git.... --force
Ceci supprimera votre/vos commit(s) précédent(s) et poussera votre commit actuel.
Ce n'est peut-être pas approprié, mais si quelqu'un tombe sur cette page, il pense qu'il pourrait vouloir une solution simple...
Notez aussi que -f
est le diminutif de --force
, donc
git push origin <your_branch_name> -f
fonctionnera également.
Tout d'abord, je ne ferais aucune modification directement dans le dépôt "principal". Si vous voulez vraiment avoir un dépôt "principal", alors vous devez seulement pousser vers ce dépôt, sans jamais le modifier directement.
En ce qui concerne l'erreur que vous obtenez, avez-vous essayé git pull
depuis votre repo local, et ensuite git push
vers le repo principal ? Ce que vous faites actuellement (si j'ai bien compris) est de forcer le push et ensuite de perdre vos changements dans le repo "principal". Vous devriez d'abord fusionner les changements localement.
Je le recommande vraiment :
de pousser uniquement vers le repo principal
de s'assurer que le repo principal est un bare repo, afin de ne jamais avoir de problème avec l'arbre de travail du repo principal qui ne serait pas synchronisé avec sa base .git
. Voir "[Comment pousser un dépôt git local vers un autre ordinateur ?][2]".
Si vous devez effectuer des modifications dans le dépôt principal (nu), clonez-le (sur le serveur principal), effectuez vos modifications et repoussez-les vers le dépôt principal.
En d'autres termes, gardez un dépôt nu accessible à la fois à partir du serveur principal et de l'ordinateur local, afin d'avoir un seul dépôt en amont à partir duquel/vers lequel tirer/tirer.