web-dev-qa-db-fra.com

Que signifie "les mises à jour de Git Push non-avancées ont été rejetées"?

J'utilise Git pour gérer mes deux ordinateurs et mon développement. J'essaie de valider des modifications dans GitHub et j'obtiens l'erreur.

Échec de la transmission de certaines références à <repo>. Pour vous éviter de perdre votre historique, des mises à jour non avancées ont été rejetées. Fusionner les modifications à distance avant de pousser à nouveau.

Quelle pourrait en être la cause et comment puis-je résoudre ce problème? 

MODIFIER:  

En tirant le repo, vous obtenez ce qui suit:

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

Pousser me donne toujours l'erreur susmentionnée.

130
Moshe

GitHub a une section Nice appelée " Traitement des erreurs de type" non-fast-forward " "

Cette erreur peut être un peu écrasante au début, n’ayez pas peur.
En termes simples, git ne peut pas effectuer le changement sur la télécommande sans perdre les validations, il refuse donc le Push.
Cela est généralement causé par un autre utilisateur poussant vers la même branche. Vous pouvez remédier à cela en récupérant et en fusionnant la branche distante ou en utilisant pull pour effectuer les deux à la fois.

Dans d'autres cas, cette erreur résulte de modifications destructrices apportées localement à l'aide de commandes telles que git commit --amend ou git rebase.
Bien que vous puissiez remplacer la télécommande en ajoutant --force à la commande Push, vous ne devriez le faire que si vous êtes absolument certain que c'est ce que vous voulez faire.
Les envois forcés peuvent causer des problèmes aux autres utilisateurs qui ont récupéré la branche distante et sont considérés comme une mauvaise pratique. En cas de doute, ne forcez pas Push.


Git ne peut pas apporter de modifications sur la télécommande comme une fusion rapide, qui/a Visual Git Reference illustre comme ceci:

alt text

Ce n'est pas exactement votre cas, mais aide à voir ce qu'est un "avance rapide" (où la HEAD d'une branche est simplement déplacée vers un nouveau commit plus récent).


"branch master->master (non-fast-forward) Already-up-to-date" est généralement destiné aux branches locales qui ne suivent pas leur contre-partie distante.
Voir, par exemple, cette question SO " git pull est à jour, mais git Push rejette le non-fast forward ".
Ou les deux branches sont connectées, mais en désaccord avec leur histoire respective:
Voir " L'histoire interminable de GIT - qu'est-ce que je fais mal ici? "

Cela signifie que votre branche Subversion et votre branche maître git distante ne sont pas d’accord sur quelque chose.
Certains changements ont été poussés/engagés dans l'un qui n'est pas dans l'autre.
Lancez gitk --all, et cela devrait vous donner une idée de ce qui ne va pas - cherchez des "forks" dans l'historique.

120
VonC

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.

48
minichate

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é, il n'y a donc pas besoin de fusion. Cela signifie que vous devez fusionner vos modifications avant de pouvoir utiliser Push.

10
bdukes

vous voudrez peut-être utiliser la force avec l'opération Push dans ce cas

git Push Origin master --force

1
uspinar

Ne faites jamais un git -f to push, car cela pourrait avoir des conséquences désastreuses plus tard.

Vous avez juste besoin de faire une traction git de votre branche locale.

Ex: - git pull Origine 'your_local_branch'

et ensuite faire un git Push

0
Abhishek Thomas

Vous devez fusionner et résoudre le conflicts locally avant de transmettre vos modifications au référentiel/fork distant. 

1) tirer (chercher et fusionner) 

$ git pull remote branch 

2) Poussez les modifications

$ git Push remote branch 

Vous avez tout de même un choix rapide pour forcer Push à l'aide de l'option --force, mais vous devez l'éviter car cela pourrait entraîner une perte de modifications ou affecter gravement d'autres contributeurs.

0
msoliman