Git push a échoué, "Les mises à jour non rapides ont été rejetées"


99

J'ai modifié mes dépôts GIT via Git Online. Après avoir essayé de pousser mes modifications de code local, j'ai eu une erreur:

Git push failed, To prevent from losing history, non-fast forward updates were rejected.

Comment puis-je réparer cela?


Réponses:


137

Tirez d'abord les modifications:

git pull origin branch_name

1
Si cela ne résout pas votre problème, assurez-vous que vous poussez vers la même branche que celle sur laquelle vous travaillez actuellement. Vérifiez sur quelle branche vous vous trouvez avec "git status".
afilina

1
Cette commande m'a fonctionné, mais j'aimerais savoir pourquoi cela ne fonctionne pas git pull:? La télécommande est égale à origin, donc il fonctionne réellement: git pull origin. Ne devrait-il pas mettre à jour toutes les branches?
Karlen Kishmiryan

83

Ajoutez --force à votre ligne de commande si vous êtes sûr de vouloir pousser. Par exemple, utilisez git push origin --force(je recommande la ligne de commande car vous trouverez beaucoup plus de support de la part d'autres utilisateurs avec la ligne de commande. De plus, cela peut ne pas être possible avec SmartGit.) Consultez ce site pour plus d'informations: http://help.github.com/ télécommandes /


8
--force résoudra vos problèmes mais nuira potentiellement aux autres. Il ne doit être utilisé qu'avec beaucoup de soin (et de connaissances)
schoetbi

7
-1 parce que forcer les poussées est généralement une mauvaise idée.
joshin4colours

6
+1 parce que 5 personnes étaient d'accord avec @ joshin4colours pour donner -1. Mais alors que la poussée forcée n'est pas toujours la meilleure idée (ce que git rend très clair en refusant votre poussée), si c'était une mauvaise idée 100% du temps, l'option n'existerait pas. La suggestion de Matt ici peut certainement être utile à d'autres.
user1271772

2
N'hésitez pas à utiliser le --forcesi vous êtes le seul à utiliser cette branche. Cela pose cependant des problèmes lors du partage d'une branche avec d'autres développeurs.
Robert Brisita

22

Avant de pousser, faites un git pull avec l'option rebase. Cela obtiendra les modifications que vous avez apportées en ligne (dans votre origine) et les appliquera localement, puis ajoutera vos modifications locales par-dessus.

git pull --rebase

Maintenant, vous pouvez pousser vers la télécommande

git push 

Pour plus d'informations, jetez un œil à Git rebase expliqué et au chapitre 3.6 Git Branching - Rebasing .


2
Dans mon cas git pull --rebasese termine parThere is no tracking information for the current branch. Please specify which branch you want to rebase against.
trejder

17

J'ai rencontré la même erreur, ajoutez simplement "--force" à la commande, cela fonctionne

git push origin master --force

6
y a-t-il des conséquences à cela?
jayunit100

8
perdre les engagements des autres.
Giovanni Toraldo

1
J'ai eu une situation étrange où c'est exactement ce que je voulais faire ... épater le contenu d'une branche principale distante qui vient d'être créée avec quelque chose de nouveau. Cela a résolu mon problème. Bien que ce ne soit pas la solution pour tout le monde, cela --forcepeut être utile.
Brad

1
Je ne pense pas que cette réponse mérite d'être votée contre 6 fois. C'est une solution valable au problème fourni, cependant, l'auteur aurait pu être un peu plus descriptif concernant les circonstances dans lesquelles cette commande serait utile. Si cela vaut la peine d'être mentionné car cela valait la peine d'être écrit (la fonctionnalité pour --force)
Aiden Strydom

5

J'ai eu le même problème.
La raison en était que ma succursale locale avait en quelque sorte perdu le suivi au profit de son homologue distant.

Après

git branch branch_name --set-upstream-to=origin/branch_name
git pull

et en résolvant les conflits de fusion, j'ai pu pousser.


Il semble que vous ayez manqué les changements dans la succursale distante
ozma

5

Vous pouvez ajouter --force-with-bail à la commande, cela fonctionnera.

git push --force-with-lease

--force est destructif car il écrase inconditionnellement le référentiel distant avec tout ce que vous avez localement. Mais --force-with-bail vous assure de ne pas écraser le travail des autres.

Voir plus d'informations ici .


1

(Une) Solution pour Netbeans 7.1: Essayez un pull. Cela échouera probablement également. Jetez maintenant un œil aux journaux (ils sont généralement affichés maintenant dans l'EDI). Il y a une / plusieurs lignes disant:

"Échec de l'extraction en raison de ce fichier:"

Recherchez ce fichier, supprimez-le (faites une sauvegarde avant). Il s'agit généralement d'un fichier .gitignore, vous ne supprimerez donc pas de code. Refaites la poussée. Tout devrait bien fonctionner maintenant.


1

L'utilisation de l' --rebaseoption a fonctionné pour moi.

  • git pull <remote> <branch> --rebase

Puis poussez vers le repo.

  • git push <remote> <branch>

Par exemple

git pull origin master --rebase

git push origin master


0

J'ai le même problème. J'ai résolu avec

git checkout <name branch>
git pull origin <name branch>
git push origin <name branch>

3
OP parle de pousser les changements de code local. checkoutécrasera ces modifications ou du moins ne les inclura pas dans push.
trejder

0

C'est ce qui a fonctionné pour moi. Il peut être trouvé dans la documentation de git ici

Si vous êtes sur la branche souhaitée, vous pouvez le faire:

git fetch origin
# Fetches updates made to an online repository
git merge origin YOUR_BRANCH_NAME
# Merges updates made online with your local work

0

Rencontré le même problème, pour le résoudre, exécutez les gitcommandes suivantes .

  • git pull {url} --rebase
  • git push --set-upstream {url} master

Vous devez d'abord avoir créé le référentiel sur github.


0

Parfois, tout en prenant une traction de votre git, la tête se détache. Vous pouvez vérifier cela en entrant la commande:

git branch 
  • (TETE détachée de 8790704)

    Maître

    développer

Il est préférable de déménager dans votre succursale et de prendre une nouvelle dose de votre succursale respective.

git checkout develop

git pull origin develop

git push origin develop
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.