158 votes

Les mises à jour Git Push non-fast-forward ont été rejetées

J'utilise Git pour gérer mes deux ordinateurs et mon développement. Je suis en train de valider les modifications apportées à GitHub et j'obtiens le message d'erreur.

Pas réussi à pousser quelques références à <repo>. Pour vous éviter de perdre de l'histoire, non de l'avance rapide des mises à jour ont été rejetées. Fusionner les modifications distantes avant de pousser à nouveau.

Ce pourrait être la cause de cela et comment je peux résoudre ce problème?

EDIT:

Tirant sur le repo renvoie les éléments suivants:

*la branche master>master (non-avance rapide) Déjà à jour

En poussant encore me donne l'erreur susmentionnée.

146voto

VonC Points 414372

GitHub a une belle section intitulée "Traitant de "non-fast-forward" erreurs"

Cette erreur peut être un peu écrasante au premier abord, n'ayez pas peur.
Il suffit de mettre, git ne peut pas faire le changement sur la télécommande sans perdre s'engage, si elle refuse le pousser.
Cela est généralement causé par un autre utilisateur en le poussant vers la même direction. Vous pouvez remédier à cela par l'extraction et la fusion de la branche distante, ou à l'aide de pull pour effectuer les deux à la fois.

Dans d'autres cas, cette erreur est le résultat de la puissance destructrice de modifications apportées localement à l'aide de commandes telles que git commit --amend ou git rebase.
Alors que vous pouvez remplacer la télécommande par l'ajout d' --force de la push de commande, vous devriez le faire que si vous êtes absolument certain de ce que vous voulez faire.
Force-pousse peut causer des problèmes pour les autres utilisateurs qui ont extrait la branche distante, et est considéré comme une mauvaise pratique. En cas de doute, n'a pas la force de pousser.


Git ne peut pas faire des changements sur la télécommande comme une avance rapide de fusion, qui un Visuel Git de Référence illustre comme:

alt text

Ce n'est pas exactement votre cas, mais permet de voir ce "fast-forward" (où l' HEAD d'une branche est simplement déplacé vers un nouveau plus récents s'engager).


Le "branch master->master (non-fast-forward) Already-up-to-date" est habituellement utilisé pour les sections locales qui n'ont pas suivi de leur distance de contre-partie.
Voir, par exemple, DONC, la question "git pull dit à jour, mais git push rejette non-fast forward".
Ou les deux branches sont connectées, mais dans disagremment avec leur histoire respective:
Voir "sans fin GIT histoire - ce que je fais mal?"

Cela signifie que vous êtes à la subversion de la branche et de votre télécommande git branche master ne sont pas d'accord sur quelque chose.
Un peu de changement a été poussé/commis à l'un qui n'est pas dans l'autre.
Le feu jusqu' gitk --all, et il devrait vous donner un indice quant à ce qui s'est passé - look pour les "fourches" dans l'histoire.

57voto

minichate Points 1141

Cela signifie qu'il y a eu d'autres commits envoyés au référentiel distant qui diffèrent de vos commits. Vous pouvez généralement résoudre cela avec un

 git pull
 

avant de pousser

En fin de compte, "avance rapide" signifie que les validations peuvent être appliquées directement au-dessus de l'arbre de travail sans nécessiter de fusion.

14voto

Greg Sheremeta Points 406

J'ai trouvé cette description d'avance rapide comme étant la plus claire.

http://365git.tumblr.com/post/504140728/fast-forward-merge

14voto

bdukes Points 54833

Une mise à jour en avance rapide est où les seuls changements d'un côté sont après la validation la plus récente de l'autre côté, de sorte qu'il n'est pas nécessaire de procéder à une fusion. Cela signifie que vous devez fusionner vos modifications avant de pouvoir pousser.

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