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?

Sarath
la source

Réponses:

137

Tirez d'abord les modifications:

git pull origin branch_name
iafonov
la source
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 /

Mat
la source
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 .

satishgoda
la source
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
Wen Qi
la source
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.

dur
la source
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 .

igorjosesantos
la source
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.

Sliq
la source
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

CyberDemic
la source
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>
Andrea Perdicchia
la source
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
CodeChops
la source
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.

blackFoxCoder
la source
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
Abhinav
la source