web-dev-qa-db-fra.com

Git dit que la branche locale est derrière la branche distante, mais ce n'est pas le cas

Scénario: 

  1. Je fais une nouvelle branche
  2. bidouiller
  3. commettez-le
  4. Poussez
  5. pirater un peu plus
  6. commettre à nouveau
  7. essayez de pousser à nouveau

Git répond:

Les mises à jour ont été rejetées car le bout de votre branche actuelle est derrière son homologue à distance. etc.

Je suis le seul à pirater cette branche - personne d'autre ne la touche. La branche distante est en fait derrière la branche locale. Je ne devrais pas avoir à tirer du tout.

(Et si je tire, Git signale des conflits entre les deux et me force à fusionner la branche en elle-même)

Pourquoi cela se produit-il (probablement)? Et comment puis-je diagnostiquer/résoudre ce problème?

Pour être clair, je ne branche nulle part, et personne d'autre travaille dessus

Remote: Commit A -------- Commit B  

Local:  Commit A -------- Commit B -------- Commit C  

C est une suite droite de B, aucune branche n’est impliquée. Mais git pense que C est une branche de A: 

Remote: Commit A -------- Commit B  

                  ------- Commit C  
                /  
Local:  Commit A -------- Commit B  

Ce n'est pas; c'est une suite droite de B.

78
Tim Janke

Vous avez probablement déjà réécrit l'histoire? Votre branche locale a divergé de celle du serveur. Exécutez cette commande pour mieux comprendre ce qui s'est passé:

gitk HEAD @{u}

Je vous recommande fortement d'essayer de comprendre d'où vient cette erreur. Pour résoudre ce problème, lancez simplement:

git Push -f

Le -f en fait une «poussée forcée» et écrase la branche sur le serveur. C'est très dangereux quand on travaille en équipe. Mais Puisque vous êtes seul et que votre état local est correct, cela devrait aller. Vous risquez de perdre l'historique de validation si ce n'est pas le cas.

189
Chronial

Cela m'est arrivé quand j'essayais de pousser la branche develop (j'utilise git flow) Quelqu'un devait maîtriser les mises à jour Push. pour le réparer j'ai fait:

git co master
git pull

Qui a récupéré ces changements. Ensuite,

git co develop
git pull

Ce qui n'a rien fait. Je pense que la branche de développement a déjà poussé malgré le message d'erreur. Tout est à jour maintenant et pas d'erreurs.

4
Daniel

La solution est très simple et a fonctionné pour moi.

Essaye ça :

git pull --rebase <url>

puis

git Push -u Origin master
2
theRana

Pour le diagnostiquer, suivez cette réponse .

Mais pour le réparer, sachant que vous êtes le seul à le changer, faites:
1 - sauvegardez votre projet (je n'ai créé que les fichiers sur git, dossier ./src)
2 - git pull
3 - restaurez votre sauvegarde sur les nombreux fichiers "désordonnés" (avec indicateurs de fusion)

J'ai essayé git pull -s recursive -X ours mais je n'ai pas fonctionné comme je le voulais, cela pourrait être une option, mais sauvegardez d'abord !!!

Assurez-vous que les différences/changements (chez git gui) sont nuls. C'est mon cas, il n'y a rien à fusionner du tout, mais github répète que je devrais fusionner ...

0
Aquarius Power