Egit a rejeté la non-avance rapide


88

Je reçois ce message en poussant vers le référentiel github. Pouvez-vous me dire la procédure étape par étape pour y remédier? J'ai poussé une seule fois et ça a réussi. Mais, lorsque j'ai mis à jour un projet et essayé de pousser mon deuxième commit, il affiche "maître rejeté non-avance rapide" et ne me permet pas de pousser. Veuillez expliquer la procédure.


J'ai le même problème après avoir créé un nouveau référentiel avec "Initialiser ce référentiel avec un README". J'ai supprimé celui-là et en ai créé à nouveau sans cette boîte de contrôle.
andrew

@andrew a raison
Dany Wehbe

Réponses:


225

J'ai eu ce même problème et j'ai pu le résoudre. afk5min avait raison, le problème est que la branche dont vous avez extrait le code a depuis changé sur le référentiel distant. Selon les pratiques git standard ( http://git-scm.com/book/en/Git-Basics-Working-with-Remotes ), vous devez (maintenant) fusionner ces modifications au référentiel distant dans vos modifications locales avant de peut s'engager. Cela a du sens, cela vous oblige à prendre les modifications des autres et à les fusionner dans votre code, garantissant que votre code continue de fonctionner avec les autres modifications en place.

Quoi qu'il en soit, sur les marches.

  1. Configurez le 'fetch' pour récupérer la branche que vous avez initialement extraite.

  2. Récupérez la branche distante.

  3. Fusionnez cette branche distante avec votre branche locale.

  4. Validez le changement (de fusion) dans votre dépôt local.

  5. Transférez la modification vers le référentiel distant.

En détail...

  1. Dans eclipse, ouvrez la vue 'Git Repositories'.

  2. Assurez-vous de voir votre référentiel local et de pouvoir voir le référentiel distant comme un sous-dossier. Dans ma version, cela s'appelle Remotes, puis je peux voir le projet distant à l'intérieur.

  3. Cherchez la flèche verte pointant vers la gauche, c'est la flèche «chercher». Cliquez avec le bouton droit de la souris et sélectionnez «Configurer Fetch».

  4. Vous devriez voir l'URI, assurez-vous qu'il pointe vers le référentiel distant.

  5. Regardez dans la section mappages de référence de la fenêtre contextuelle. Le mien était vide. Cela indiquera les références distantes que vous souhaitez récupérer. Cliquez sur «Ajouter».

  6. Tapez le nom de la branche que vous devez récupérer dans le référentiel distant. Le mien était 'master' (btw, un menu déroulant ici serait génial !!, pour l'instant, vous devez le taper). Continuez dans la fenêtre contextuelle, puis cliquez sur «Terminer».

  7. Cliquez sur "Enregistrer et récupérer". Cela récupérera cette référence distante.

  8. Regardez dans le dossier «Branches» de votre référentiel local. Vous devriez maintenant voir cette branche distante dans le dossier distant. Encore une fois, je vois «maître».

  9. Cliquez avec le bouton droit de la souris sur la branche locale dans le dossier «Local» de «Branches», qui est nommé «maître». Sélectionnez «Fusionner», puis sélectionnez la branche distante, qui est nommée «origine / maître».

  10. Traitez à travers la fusion.

  11. Validez toutes les modifications apportées à votre référentiel local.

  12. Transférez vos modifications vers le référentiel distant.

  13. Allez prendre une boisson savoureuse en vous félicitant. Prenez le reste de la journée.


7
Cela devrait être marqué comme la réponse. A travaillé comme un charme. Ce problème se produit même si je n'ai ajouté aucun fichier (le fichier README habituel) lors de la création du dépôt sur GitHub pour mon projet dans Eclipse. Merci beaucoup pour l'explication étape par étape facile à suivre.
rbaleksandar

Ce problème m'a pris un an à régler, jusqu'à ce que je lise votre message. Dans mon cas, je n'avais pas de télécommande mais Eclipse en a créé une par défaut appelée «origine».
Eugene van der Merwe

Doux, enfin je peux fusionner avec Eclipse. Le point clé ici est d'utiliser la vue Git Repositories pour effectuer la fusion, et non la vue Team Synchronize habituelle. Ce serait bien si dans l'équipe synchroniser la vue eGit pouvait avoir désactivé toutes les options qui ne font rien.
dan carter

1
Bien que cela fonctionne, cela crée une validation de fusion inutile. Vous devriez utiliser rebase ici, ce qui est bien car vos modifications ne sont que locales, donc vous ne changez aucun historique publié (et si vous le faisiez, git vous hurlerait quand même pour une poussée non rapide). J'aime la réponse de MYN.
nyuszika7h

Faites un clic droit sur le projet puis Mergeen master puis cliquez à nouveau avec le bouton droit sur le projet push branch Mastertravaillé
user1207289

17

Dans mon cas, j'ai choisi la Force Updatecase à cocher en poussant. Ça a marché comme sur des roulettes.


Cela a fonctionné pour moi aussi. J'avais la condition de l'OP après avoir "modifié" un commit. Et aller chercher m'a donné "rien à récupérer"
Twilite

11

Entre-temps (pendant que vous mettiez à jour votre projet), d'autres commits ont été effectués dans la branche «master». Par conséquent, vous devez d'abord extraire ces modifications pour pouvoir appliquer vos modifications.


3
dans ce cas, git est assez stupide, j'ai poussé toutes les modifications sur la télécommande. et je suis le seul à travailler sur le projet. Pourquoi diable dois-je tirer la télécommande avant de pouvoir pousser à nouveau ???? le changement proviendrait de ma section locale à l'origine
Junchen Liu

7

Applicable pour Eclipse Luna + Eclipse Git 3.6.1

JE,

  1. référentiel git cloné
  2. fait quelques changements dans le code source
  3. modifications par étapes de Git Staging View
  4. enfin, engagez-vous et poussez!

Et j'ai rencontré ce problème avec EGit et voici comment je l'ai résolu.

Oui, quelqu'un a validé les modifications avant de valider mes modifications. Les modifications sont donc rejetées. Après cette erreur, les modifications sont réellement validées dans le référentiel local. Je ne voulais pas juste Pullles changements parce que je voulais maintenir linear historycomme indiqué dans - Dans quels cas `git pull` pourrait-il être nocif?

Alors, j'ai exécuté les étapes suivantes

  1. du point de vue du référentiel Git, faites un clic droit sur le
    projet Git concerné
  2. select Fetch from Upstream- il récupère les mises à jour à distance (références et objets) mais aucune mise à jour n'est effectuée localement. pour plus d'informations, reportez-vous à Quelle est la différence entre 'git pull' et 'git fetch'?
  3. sélectionnez Rebase...- cela ouvre une fenêtre contextuelle, cliquez sur Preserve merges during rebasevoir pourquoi
    Que fait exactement "rebase --preserve-merges" de git (et pourquoi?)
  4. cliquer sur Rebase button
  5. s'il y en a conflict(s), passez à l'étape 6 sinon à l'étape 11
  6. un Rebase Resultpopup apparaîtra, il suffit de cliquer surOK
  7. file comparatorouvrirait, vous devez modifier left side file.
  8. une fois que vous avez terminé de fusionner correctement les modifications, allez Git Stagingvoir
  9. stage the changes. c'est à direadd to index
  10. sur la même vue, cliquez sur Rebase-> Continue. répétez 7 à 10 jusqu'à ce que tous les conflits soient résolus.
  11. depuis la Historyvue, sélectionnez votre ligne de validation et sélectionnezPush Commit
  12. cochez la Rebase Commits of local.......case et cliquez sur suivant. référez-vous pourquoi - Git: rebase sur la branche de développement depuis l'amont
  13. cliquer sur Finish

Remarque: si vous avez plusieurs commits de référentiel local, vous devez les écraser en un seul commit pour éviter plusieurs fusions.


Je suis d'accord avec l'utilisation du rebase au lieu de la fusion. C'est mieux car cela ne crée pas de validation de fusion inutile. (Hors sujet: Stack Overflow est complètement ridicule et rejette mon commentaire uniquement sur la base du fait que j'ai initialement écrit "+1 for". Mon commentaire est parfaitement constructif, merci.)
nyuszika7h

4

Configurer Après avoir poussé le code lorsque vous recevez un message rejeté, cliquez sur configurer et cliquez sur Ajouter une spécification comme indiqué dans cette image

Réf source et référence destination Descendez et cliquez sur le ref / heads / yourbranchname et cliquez à nouveau sur Add Spec

entrez la description de l'image ici Assurez-vous de sélectionner la mise à jour forcée

entrez la description de l'image ici Enfin, enregistrez et poussez le code vers le dépôt


3

Ouvrez la vue git:

1- sélectionnez votre projet et choisissez fusionner 2- Sélectionnez le suivi à distance 3- cliquez sur ok

Git fusionnera la branche distante avec le référentiel local

4- puis poussez


1

Cette erreur signifie que le référentiel distant a eu d'autres validations et a dépassé votre succursale locale.
J'essaye de faire un git pull suivi d'un git push. S'il n'y a pas de modifications conflictuelles, git pull obtient le dernier code dans ma branche locale tout en conservant mes modifications intactes.
Ensuite, un push git pousse mes modifications vers la branche master.


semble que beaucoup de gens manquent cette résolution simple: D
Noir

0

J'ai trouvé que vous devez être sur le dernier commit du git. Voici donc les étapes à suivre: 1) assurez-vous que vous n'avez pas travaillé sur les mêmes fichiers, sinon vous rencontrerez une erreur DITY_WORK_TREE. 2) tirez les dernières modifications. 3) Validez vos mises à jour.

J'espère que cela t'aides.


-1
  1. Allez dans Github et créez un dépôt pour votre nouveau code.
  2. Utilisez la nouvelle URL https ou ssh dans Eclise lorsque vous effectuez la poussée vers l'amont;
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.