108 votes

Comment forcer un push réinitialisé vers le dépôt distant ?

Notre branche principale à distance s'est étonnamment embrouillée. Le code de développement actuel est sur la branche principale avec les derniers commits. De toute évidence, le code de développement n'est pas prêt pour la branche principale.

Alors sur mon dépôt local, j'ai fait un reset à la dernière balise, git reset --hard (Tag). La branche principale est maintenant correcte sur mon dépôt local. Maintenant, lorsque j'essaie de pousser les modifications sur le dépôt distant, git push origin master, j'obtiens une erreur :

à (EMPLACEMENT DU DÉPÔT GIT DISTANT)
 ! [rejected]        master -> master (non-fast-forward)
erreur: impossible de pousser certaines références vers '(EMPLACEMENT DU DÉPÔT GIT DISTANT)'
Pour éviter que vous ne perdiez de l'historique, les mises à jour non fast-forward ont été rejetées
Fusionnez les modifications à distance (par exemple, 'git pull') avant de pousser à nouveau.  Voir la section 'Note sur les fast-forwards' de 'git push --help' pour plus de détails.

Donc après avoir regardé autour, j'ai découvert l'option --force. J'ai donc fait une poussée forcée sur le dépôt distant, git push --force origin master, et j'ai encore eu une erreur :

Total 0 (delta 0), réutilisé 0 (delta 0)
à (EMPLACEMENT DU DÉPÔT GIT DISTANT)
 ! [remote rejected] master -> master (non-fast-forward)
erreur: impossible de pousser certaines références vers '(EMPLACEMENT DU DÉPÔT GIT DISTANT)'

Je ne peux pas faire de pull sur master, car il contient du code de développement qui ne peut pas être sur master.

2voto

filiph Points 735

Vous n'êtes pas autorisé à effectuer un git push qui n'est pas fast-forward.

  1. Si le serveur distant est GitHub, allez à https://github.com/$USER/$REPO/settings/branches et déprotégez la branche en question.

    entrer la description de l'image ici

    Vous devez être administrateur du dépôt pour pouvoir le faire.

  2. Si le serveur distant est votre propre serveur git, exécutez git config receive.denynonfastforwards false là-bas.

1voto

jglathe Points 46

Pour moi, l'astuce de @svick a indiqué la bonne direction. Étant donné que le serveur git que je voulais modifier est en fait ma propre machine, je me suis connecté et j'ai exécuté la commande git config --global receive.denynonfastforwards false pour changer tous les dépôts afin qu'ils acceptent une poussée forcée en non-ff. Cela n'a pas fonctionné immédiatement. J'ai découvert que dans la configuration, la valeur receive.denynonfastforwards=true était déjà définie et ne pouvait pas être supprimée avec la commande git config --global --unset receive.denynonfastforwards. Cependant, modifier manuellement le dépôt (vi config) a fonctionné.

0voto

Sudheesh.M.S Points 35

Le problème survient car la branche actuelle n'est pas configurée correctement pour le PULL. Vérifiez d'abord si la branche amont est correctement configurée pour le pull en utilisant - git remote show origin. Vous pouvez le trouver dans la section - Branches locales configurées pour 'git pull':. Sinon, configurez-la en utilisant :

git config branch.MYBRANCH.merge refs/heads/MYBRANCH

Donnez le nom de la branche approprié pour le placeholder - MYBRANCH

0voto

Shqear Points 41

Je utilise ce groupe de commandes pour réinitialiser mon dépôt distant, cela réinitialisera votre dépôt local et le reliera à nouveau avec votre dépôt distant, puis forcera la mise à jour.

Je pense que cette manière ne fonctionnera pas dans votre cas, mais peut être utile pour quelqu'un d'autre

allez dans le dossier source puis exécutez les commandes : notez que https://github.com/*.git est le lien de votre dépôt distant

git init
git remote add origin https://github.com/*.git
git add .
git commit -m "commit initial"
git push origin master -f
git push --set-upstream origin master

`Note : cela effacera tout votre historique git sur votre branche principale`

0voto

dasra khadka Points 88

J'ai résolu en supprimant la branche principale des règles de protection et également par défaut, qui dépasse simplement les règles de la branche protégée dans les paramètres d'un dépôt.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X