Message complet:
error: Ref refs/remotes/origin/user is at 3636498c2ea7735fdcedc9af5ab3c8689e6abe77 but expected a21359c6cc2097c85775cde6a40105f4bd7100ec
From github.com:{github project url}
! a21359c..6273ffc user -> origin/user (unable to update local ref)
git push --force
. Essayez de courirgit pull --force
.Réponses:
Si vous exécutez git sous un système de fichiers qui ne respecte pas la casse (Windows ou OS X), cela se produira s'il y a deux branches avec le même nom mais des majuscules différentes, par exemple
user_model_changes
etUser_model_changes
comme les deux branches distantes correspondront à la même référence de suivi .Supprimez la mauvaise branche distante (vous ne devriez pas avoir de branches qui ne diffèrent que par la casse), puis
git remote prune origin
tout devrait fonctionnerla source
.git\refs\remotes\origin
dossier, puis àgit pull
nouveau.Fix permanent
git update-ref -d
résolu mon instance de cette erreur, par exempleNotez que cela n'a pas d'impact sur la télécommande.
Dans mon cas, un suivant a
git fetch
récupéré à nouveau cette branche et les git fetches / pulls suivants n'ont plus donné l'erreur "la référence à distance est à mais attendue".Si cela ne fonctionne pas, un correctif temporaire:
Notez également que si vous ne vous souciez pas de la branche en question (par exemple, vous voulez simplement mettre à jour le maître, pas l'origine / l'utilisateur), une
git pull
solution de contournement consiste à récupérer puis simplement fusionner la branche particulière qui vous intéresse, par exemplela source
Supprimez simplement les dossiers et fichiers sous
\.git\refs\remotes\origin
. Fonctionne, quand vous n'avez pas de changements non poussés.la source
J'ai exécuté ceci pour résoudre le problème:
la source
Utilisez les deux commandes ci-dessous une par une.
Cela résoudra votre problème.
la source
J'ai dû supprimer ma branche de ma ligne de commande à:
puis faire manuellement:
J'ai pu tirer les changements.
Remarque: J'utilisais SourceTree et je n'ai pas pu effectuer la traction.
la source
.git\packed-refs
avant qu'elle ne soit réparée pour moi.Une réinitialisation matérielle résoudra également le problème
la source
Des étapes plus claires
dans le terminal
faites
ls
, vous verrez quelques branches et HEADSupprimez la branche qui, selon vous, présente le problème
Si cela ne fonctionnait pas, supprimez toutes les branches / HEAD
J'espère que cela fonctionne maintenant.
la source
git update-ref -d <branchname>
?Essayez ça, ça a marché pour moi. Dans votre terminal:
git remote prune origin
.la source
Malheureusement, les commandes GIT comme prune et reset ou push n'ont pas fonctionné pour moi. Prune a fonctionné une fois, puis le problème est revenu.
La solution permanente qui a fonctionné pour moi est de modifier un fichier git manuellement. Accédez simplement au dossier .git du projet, puis ouvrez le fichier pack-refs dans un éditeur de texte comme Notepad ++. Ensuite, accédez à la ligne avec la branche défaillante et mettez à jour son guide vers la ligne attendue.
Si vous avez un message comme:
"erreur: impossible de verrouiller la référence" références / télécommandes / origine / fonction / branche_xxx ": est à 425ea23facf96f51f412441f41ad488fc098cf23 mais attendue 383de86fed394ff1a1aeefc4a522d886adcecd79"
puis dans le fichier, trouvez la ligne avec 'refs / remotes / origin / feature / branch_xxx'. Le guid y sera celui attendu (2ème) - 383de86fed394ff1a1aeefc4a522d886adcecd79. Vous devez le remplacer par le vrai (1er) - 425ea23facf96f51f412441f41ad488fc098cf23.
Répétez l'opération pour les autres branches défaillantes et vous serez prêt à continuer. Parfois, après la récupération, je devais répéter pour les mêmes branches que j'avais déjà «corrigées» plus tôt. Lors de la récupération, les mises à jour de GIT guident et vous donnent la dernière.
Quoi qu'il en soit, le problème n'est pas un arrêt de spectacle. La liste des succursales est mise à jour. C'est plutôt un avertissement.
la source
git for-each-ref --format = 'delete% (refname)' refs / original | git update-ref --stdin git reflog expire --expire = now --all git gc --prune = now
la source
Même cas ici, mais rien sur les commentaires postés, c'est juste dans mon cas, je n'ai qu'une seule branche (maître) et n'utilise que le système de fichiers Unix, cette erreur se produit au hasard lorsque j'exécute git fetch --progress --prune origine et la branche est en avance ou 'origine / maître'. Personne ne peut valider, seul 1 utilisateur peut faire push.
REMARQUE: j'ai un sous-module dans le référentiel acme, et acme a de nouveaux changements de sous-module (nouveaux commits), j'ai d'abord besoin de faire une mise à jour du sous-module avec la mise à jour du sous-module git.
Pour résoudre ce problème (dans mon cas), lancez simplement git push si votre branche est en avance sur l'origine.
la source
Je sais que c'est vieux, mais j'ai ma propre solution. Étant donné que j'utilise l'arborescence source, cette erreur se produit car quelqu'un crée une nouvelle branche. L'arbre source est confus à ce sujet. Après avoir appuyé sur le bouton "Actualiser" à côté de la zone de liste déroulante "branche distante pour tirer", il semble que sourcetree a mis à jour la liste des branches, et maintenant je peux tirer avec succès.
la source
J'ai eu le même problème qui était dû au fait que je suis revenu à un commit plus ancien même si j'ai déjà poussé vers la branche distante.
Je l'ai résolu en supprimant ma branche locale, puis en vérifiant la branche d'origine
git checkout origin/my_branch
et en exécutantgit checkout my_branch
la source
Après avoir constamment recherché, c'est la solution qui a fonctionné pour moi qui implique de désinstaller / supprimer le amont
la source