maître rejeté -> maître (pas d'avance rapide)

217

J'essaie de pousser mon projet (tous les fichiers dans un nouveau référentiel). Je suis les étapes mais quand je pousse avec git push -u origin masterj'obtiens cette erreur:

! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to '[email protected]:asantoya/projectnewbies.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again.  See the
'Note about fast-forwards' section of 'git push --help' for details.

J'ai eu cette erreur plusieurs fois et je ne sais pas quoi faire.

Asantoya17
la source
4
Si vous êtes sûr que votre maître local a les dernières modifications que vous souhaitez sur la télécommande, alors faites git push --force
IgorGanapolsky
34
git push --force <remote_repository>travaillé pour moi.
Trieur
@Sorter - J'ai eu le même problème toute la journée, cela m'a aidé !! Je vous remercie. Mais il ne fournit pas d'explication pour expliquer pourquoi le problème s'est produit en premier lieu et pourquoi le correctif a fonctionné.
Padawan
1
@pmr, demandant simplement si l'OP "lire le message d'erreur" n'aide pas du tout. De toute évidence, le message d'erreur n'avait aucun sens pour le PO, tout comme il ne me faisait aucun message, ni aux 66 autres personnes qui ont voté pour son poste. Snarky, plus spirituel que ça, n'aide pas du tout les gens.
Padawan
3
@Padawan Vous remarquerez également que cette "personne sarcastique, plus spirituelle que par hasard" a fourni la réponse acceptée à cette question et 72 personnes (vous y compris probablement) l'ont trouvée utile. Je suis désolé que mon commentaire soit apparu comme arrogant, mais cela aurait été ma première question si vous m'aviez posé cette question dans un contexte professionnel également. Parfois, s'arrêter et prendre une minute pour lire attentivement le message d'erreur fait parfois des merveilles. Je l'ai fait pour moi quand j'ai vu cette erreur pour la première fois.
pmr

Réponses:

160

Comme l'indique le message d'erreur: git pullavant d'essayer git push. Apparemment, votre branche locale n'est pas synchronisée avec votre branche de suivi.

Selon les règles du projet et votre flux de travail, vous pouvez également utiliser git pull --rebase.

pmr
la source
1
il me montre que la fusion automatique README.md de fusion automatique a échoué; résoudre les conflits, puis valider le résultat.
Asantoya17
1
@ Asantoya17 Les modifications apportées au maître distant sont en conflit avec vos modifications. Examinez le fichier et examinez-les. Validez ensuite les résultats de la résolution. Veuillez obtenir un tutoriel ou un livre ou au moins lire les messages.
pmr
1
Que signifie tirer? Vous permet de pousser un fichier ou de récupérer et de télécharger un fichier à partir du site Web du référentiel? (par exemple Bit Bucket)
David Dimalanta
4
@AndrewS git push --force origin master. Si vous rencontrez ce type de problèmes plus d'une fois dans votre vie, le flux de travail de votre projet est interrompu. Les fonctionnalités doivent être développées dans des branches et fusionnées sans avance rapide et si une fonctionnalité a "échoué", vous devez annuler le commit de fusion (de préférence, faites vos tests dans une branche d'intégration avant de fusionner une fonctionnalité à maîtriser). Aucune idée d'Eclipse cependant.
pmr
1
Que faire si cette erreur est signalée par git pull origin trunk:master?
Andry
175

AVIS: Ce n'est jamais une utilisation recommandée de git. Cela écrasera les modifications sur la télécommande. Ne faites cela que si vous savez à 100% que vos modifications locales doivent être transmises au maître distant.

Essaye ça: git push -f origin master

shakhmatov
la source
47
Non, n'essaye pas ça. De git help push: "Cela peut entraîner la perte de validations du référentiel distant; utilisez-le avec précaution."
jcsahnwaldt Reinstate Monica
7
ne faites certainement pas cela
Lluís
14
cela a fonctionné pour moi. J'ai pensé que c'était OK parce que mon seul commit sur github était celui créé avec un nouveau dépôt. Probablement une bonne idée de ne pas l'utiliser après le démarrage d'un projet.
Matthew Moore
1
peut être utile si vous souhaitez mettre à jour un dépôt qui a été créé à des fins de livraison (donc pas de nouvelles modifications du côté distant)
HiB
Je viens de l'utiliser car je viens de faire un commit, synchronisé avec GitHub, puis je souhaitais avoir ajouté un autre fichier à ce commit. Je l'ai donc annulée localement, exécuté la commande ci-dessus pour l'effacer de GitHub, puis validée à nouveau localement, puis synchronisée. Tout va bien maintenant! Remarquez, je savais pertinemment qu'aucun autre engagement n'avait été fait pour cette branche.
zeMinimalist
18

cette commande a bien fonctionné pour moi

git push -f origin master
raed
la source
3
Soyez prudent avant d'utiliser cette commande. En utilisant cette commande, vous perdrez tous vos validations passées.
twenk11k
est -f signifie poussée de force
maheshmnj
@maheshmnj Oui!
testuser le
15

Je viens de recevoir cette erreur.

J'ai créé un référentiel github après avoir créé mon référentiel git local, j'ai donc dû accepter les modifications en local avant de pousser vers github. Dans ce cas, la seule modification a été le fichier readme créé comme étape facultative lors de la création du référentiel github.

git pull https://github.com/*username*/*repository*.git master

L'URL du référentiel est obtenue à partir d'ici sur la page github du projet:

entrez la description de l'image ici

J'ai ensuite réinitialisé (cela peut ne pas être nécessaire)

git init
git add .
git commit -m "update"

Appuyez ensuite sur:

git push
ciel bleu
la source
3
Cette réponse reflète le scénario de cas réel.
kta
9

j'avais créé un nouveau dépôt dans github et j'avais le même problème, mais il avait aussi des problèmes lors du tirage, donc cela a fonctionné pour moi.

mais ce n'est pas conseillé dans les repos qui ont déjà beaucoup de codes car cela pourrait tout gâcher

git push origin master --force
Muneef M
la source
Cette réponse est déjà donnée: stackoverflow.com/a/16374574/1771479 , et il est déconseillé de le faire.
2015
9

AVERTISSEMENT:

Opter pour un ' git pull' n'est pas TOUJOURS une solution, alors faites attention. Vous pouvez rencontrer ce problème (celui qui est mentionné dans le Q) si vous avez intentionnellement modifié l'historique de votre référentiel. Dans ce cas, git confond vos changements d'historique avec de nouveaux changements dans votre dépôt à distance. Donc, vous devriez opter pour un git push --force, car appeler git pullannulera intentionnellement toutes les modifications que vous avez apportées à votre historique.

Gupta
la source
8

Si git pullcela ne vous aide pas, alors vous avez probablement poussé vos modifications (A) et après cela, vous avez utilisé git commit --amendpour ajouter d'autres modifications (B). Par conséquent, git pense que vous pouvez perdre l'historique - il interprète B comme un commit différent bien qu'il contienne toutes les modifications de A.

             B
            /
        ---X---A

Si personne ne modifie le dépôt après A, vous pouvez le faire git push --force.

Cependant, s'il y a des changements après Ad'une autre personne:

             B
            /
        ---X---A---C

alors vous devez rebaser que les personnes passent de Aà B( C-> D).

             B---D
            /
        ---X---A---C

ou résoudre le problème manuellement. Je ne savais pas encore comment faire ça.

Alexander Volkov
la source
7

utilisez cette commande:

git pull --allow-unrelated-histories <nick name of repository> <branch name>

comme:

git pull --allow-unrelated-histories origin master

cette erreur se produit lorsque les projets n'ont aucun ancêtre commun.

Umar Farooq
la source
7
git push -f origin master

utilisez la force brute ;-) Vous essayez probablement d'ajouter un dossier local que vous avez créé avant de créer le dépôt sur git.

Ngoni
la source
2
Toute réponse, y compris celle-ci, devrait donner un avertissement.
D. Ben Knoble
1
J'ai essayé cela et cela m'a coûté beaucoup de commits sur GitHub que j'ai dû restaurer à partir d'un autre clone local du dépôt. Dangereux.
Paflow
6

C'est parce que vous avez fait quelques changements dans votre master, donc le projet vous demande de tirer en premier. Si vous voulez quand même le pousser, vous pouvez utiliser la force brute en tapant ceci:

git push -f origin master

N'oubliez pas de valider d'abord vos modifications:

git add .
git commit -m "Your commit message"
gtech
la source
4

Tu as besoin de faire

git branch

si la sortie est quelque chose comme:

* (no branch)
master

alors fais

git checkout master

Assurez-vous que vous n'avez pas de validations en attente, car le retrait perdra toutes les modifications non validées.

cage
la source
4

! [rejeté] master -> master (pas d'avance rapide)

Pas de panique, c'est extrêmement facile à réparer. Tout ce que vous avez à faire est d'émettre un pull et votre branche sera en avance rapide:

$ git pull myrepo master

Réessayez ensuite votre poussée et tout devrait bien se passer:

$ git push github master

user3292712
la source
4

Cela m'est arrivé quand j'étais sur la branche de développement et ma branche principale n'est pas avec la dernière mise à jour.

Donc, quand j'ai essayé de git push depuis la branche develop, j'ai eu cette erreur.

Je l'ai corrigé en passant à la branche principale, git pull, puis reviens pour développer la branche et git push.

$ git fetch && git checkout master
$ git pull
$ git fetch && git checkout develop
$ git push
Jonn Marc Vistal
la source
3

J'ai eu ce problème sur une machine de développement. La devbranche poussait bien mais la masterbranche m'a donné (tout git pushen étant sur la devbranche):

! [rejected]        master -> master (non-fast-forward)

J'ai donc essayé:

git checkout master
git pull

Ce qui m'a donné:

You asked me to pull without telling me which branch you
want to merge with, and 'branch.master.merge' in
your configuration file does not tell me, either.

J'ai découvert que la branche principale manquait .git/configet j'ai ajouté:

[branch "master"]
    remote = origin
    merge = refs/heads/master

Ensuite, il a git pushégalement bien fonctionné sur la devbranche.

kqw
la source
2

Ma télécommande n'était pas synchronisée avec la section locale, cela a donc fonctionné pour moi

git pull --rebase

et assurez-vous que lorsque vous git pullrecommencez, il devrait indiquer Déjà à jour et maintenant vous êtes prêt à pousser à l'origine

en supposant que vous avez déjà git remote add origin remote repository URL

faire

`git push origin master`  

La capture d'écran en dit long entrez la description de l'image ici

Vous pouvez également le faire

  1. git stash (stocke temporairement le travail non engagé)
  2. git pull (synchronisez votre local et votre distant)
  3. git stash pop (récupérez vos modifications non validées)
  4. git push
maheshmnj
la source
1

J'avais même problème. J'utilise Git Totoise. Faites un clic droit -> TotoiseGit -> Nettoyer. Maintenant, vous pouvez pousser vers Github Cela a bien fonctionné avec moi: D

Son Nguyen Thanh
la source
1

En effet, vous avez apporté des modifications contradictoires à son maître. Et votre serveur de référentiel n'est pas en mesure de vous le dire avec ces mots, il donne donc cette erreur car il ne s'agit pas de lui de gérer ces conflits pour vous, il vous demande donc de le faire par lui-même. Comme?

1- git pull Cela fusionnera votre code de votre référentiel avec votre code de votre maître de site. Les conflits sont donc affichés.

2- traiter ces conflits manualemente.

3-

git push origin master

Et hop, votre problème a été résolu.

Paulo Linhares - Packapps
la source
0

Le seul que j'ai pu résoudre ce problème était de supprimer le dépôt local et git et de le créer à nouveau aux deux extrémités. Fonctionne bien pour l'instant.

Akash Kumar Sharma
la source
Je garde toujours une sauvegarde de mon dépôt git sur Dropbox. De cette façon, je n'ai pas à supprimer le dépôt local, je copie et colle simplement les répertoires pertinents de Dropbox lorsque la situation se présente.
IgorGanapolsky
0

Si quelqu'un a cette erreur en essayant de pousser vers heroku, remplacez simplement 'origin' par 'heroku' comme ceci: git push -f heroku master

Vadim Malakhovski
la source
0

Essayez ça, dans mon cas ça marche

git rebase --abort

Ahmer Afzal
la source
0

Cela peut également être dû à une erreur de nom causée lors de la désignation du référentiel. Si l'une des réponses ci-dessus n'a pas fonctionné, cela a fonctionné pour moi:

Supprimez ce dépôt, créez-en un nouveau et essayez à nouveau les commandes suivantes:

cd 'Local Directory Path'
git remote add origin *your_git_name.git*
git push -u origin master

si ajouter l'origine montre déjà, utilisez ceci à la place:

git remote set-url origin *your_git_name.git*
Harshal SG
la source