69 votes

git push rejected : error : failed to push some refs (erreur : échec du transfert de certaines références)

Je sais que des personnes ont posé des questions similaires, mais je crois que les causes de leurs problèmes sont différentes. J'ai fait un hard reset parce que j'avais assez mal fait mon code.

 git reset --hard 41651df8fc9

J'ai fait quelques changements, j'ai fait quelques commits et maintenant que j'essaie de pousser tous ces commits dans le serveur, j'obtiens l'erreur suivante :

 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'git@git.somewhere.git'

Git suggère de faire un git pull et c'est ce que d'autres personnes ont suggéré à d'autres utilisateurs. Cependant, je pense qu'un git pull va fusionner mon code actuel avec le code que je ne veux plus (head revision). Comment puis-je faire un push et oublier la version/les révisions qui me précèdent ?

106voto

blueshift Points 3281

git push -f si vous en avez l'autorisation, mais cela perturbera tous ceux qui tirent de ce dépôt, alors soyez prudent.

Si cela est refusé, et que vous avez accès au serveur, comme le dit Canzar ci-dessous, vous pouvez autoriser cela sur le serveur avec

git config receive.denyNonFastForwards false

0 votes

Je suppose que je n'ai pas la permission 'remote : error : denying non-fast-forward refs/heads/master (you should pull first)' Je suis le seul à travailler sur ce repo pour le moment, donc je ne m'inquiète pas pour les autres branches ou autre. Des idées ?

0 votes

Si vous êtes la seule personne à posséder ce dépôt, utilisez simplement git push -f qui utilisera votre dépôt actuel pour remplacer le dépôt distant. S'il y a un développement multi-utilisateurs, l'avance rapide est essentielle, sinon, il sera très facile de se dégoûter .

1 votes

Si vous pouvez vous connecter à distance, vous pouvez aller directement dans le dépôt git nu et rembobiner manuellement la branche, avec git branch -f par exemple, git branch -f rewind_the_one_I_broke 8120307 par exemple. Vous pouvez exécuter git log dans un repo nu pour trouver le point de réinitialisation. Notez que cela a le même effet qu'un git push -f mais contourne les crochets.

32voto

ouah Points 75311

Si vous êtes la seule personne à travailler sur le projet, vous pouvez faire ce qui suit :

 git checkout master
 git push origin +HEAD

Cela mettra la pointe de origin/master au même commit que master ( et ainsi supprimer les commits entre 41651df et origin/master )

0 votes

Est-ce que cela me débarrassera du code que je ne veux plus et gardera mon nouveau code ? (désolé si c'est une réponse stupide)

2 votes

ceci va définir le bout de origin/master au même commit que master (et donc supprimer les commits entre 41651df et origin/master)

0 votes

Mettre à jour la branche master du dépôt d'origine avec la branche située HEAD actuelle, permettant des mises à jour non rapides. Donc, c'est la même chose avec git push HEAD -f . Pour moi, je pense que vous pouvez utiliser une manière plus douce de le faire, d'abord, utilisez git fetch après cela, utilisez git rebase -i origin/master ce qui vous permettra de sélectionner les commits.

21voto

user1189762 Points 1406

Fais-le.

git pull origin [branch]

et ensuite tu devrais pouvoir pousser.

Si vous avez des commits sur votre propre compte et que vous n'avez pas encore poussé la branche, essayez de

git pull --rebase origin [branch]

et ensuite tu devrais pouvoir pousser.

Plus d'informations sur gérer les branches avec Git .

2 votes

fatal : Impossible de trouver la référence distante [branche].

4voto

manojlds Points 96599

'remote : error : denying non-fast-forward refs/heads/master (vous devriez tirer d'abord)

Ce message suggère qu'il y a un crochet sur le serveur qui rejette les poussées d'avance rapide. Oui, ce n'est généralement pas recommandé et c'est un bon garde-fou, mais puisque vous êtes la seule personne à l'utiliser et que vous voulez faire le "force push", contactez l'administrateur du repo pour qu'il vous autorise à faire le "non-fastforward push" en retirant temporairement le hook ou en vous donnant la permission dans le hook de le faire.

1 votes

Ou, demandez à l'administrateur d'exécuter git branch -f qui a le même effet mais ne nécessite pas de s'embêter avec le crochet de pré-réception.

3voto

Ce que j'ai fait pour résoudre le problème était :

git pull origin [branch]
git push origin [branch]

Assurez-vous également que vous pointez sur la bonne branche en exécutant :

git remote set-url origin [url]

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