Erreur Git sur git pull (impossible de mettre à jour la référence locale)


117

Je n'ai que le maître de branche et j'obtiens cette erreur chaque fois que j'essaye de "git pull":

error: Couldn't set refs/remotes/origin/master
From /var/lib/git/xxx/project
 ! a0f80ea..49177a3  master     -> origin/master  (unable to update local ref)

et quand je fais "git pull origin master" j'obtiens:

error: Couldn't set ORIG_HEAD
fatal: Cannot update the ref 'ORIG_HEAD'.

J'ai cherché mais je ne trouve pas pourquoi


2
Où est le référentiel local? L'avez-vous créé en tant qu'utilisateur différent de celui que vous utilisez pour exécuter l'extraction? Cela ressemble à un problème d'autorisation de fichier.
tpg2114

Oui, vous avez raison après avoir dit que le propriétaire des fichiers du projet était un autre utilisateur, maintenant ma question semble tellement idiote, mais vous m'avez donné la réponse, veuillez en faire une réponse pour la choisir comme la meilleure;)
user115561

s'il vous plaît @ tpg2114 ajouter ceci comme réponse pour le choisir
user115561

Réponses:


264

Mon équipe et moi avons rencontré cette erreur, incapable de mettre à jour la référence locale , lors d'une extraction dans SourceTree.

Nous avons utilisé :

git gc --prune=now

Cela supprime tous les objets de référence en double qui devraient résoudre le problème.

Voici quelques liens où vous pouvez en savoir plus sur les références git et l'élagage :

git astuce de la semaine

documentation de git-prune

références git


1
A travaillé pour moi aussi, même message, Sourcetree sur Windows 7
James Westgate

2
vient de commencer à avoir ce problème aussi. Merci beaucoup! a parfaitement fonctionné!
ddrossi93

3
Peut avoir besoin de ces deux commandes: git gc --prune=now git remote prune originde stackoverflow.com/questions/2998832/…
bryan

1
J'ai essayé git remote prune originet cela n'a pas fonctionné pour moi. Mais après cela, j'ai essayé cela git gc --prune=now, et cela a fonctionné! Je ne sais pas si les deux étaient nécessaires dans cet ordre, ou seulement celui-ci.
Anurag le

1
Encore un autre problème cryptique gitqui conduit à un article StackOverflow utile avec une solution laconique.
ijoseph

130

J'ai résolu comme ci-dessous:

git remote prune origin


6
Eureka! Cela a effectivement fonctionné. Cela a quelque chose à voir avec les branches renommées à distance ou quelque chose. Je ne vais pas essayer de l'expliquer.
TheSoftwareJedi

8
Cela l'a fait pour moi, git gc --prune=nown'a rien fait
Josh G

3
même. cela fonctionne pour moi. git gc --prune = maintenant ne fonctionnait pas pour moi.
Tony

16

avec gitbach line commande, utilisez git update-refpour mettre à jour la référence de votre succursale locale:

$ git update-ref -d refs/remotes/origin/[locked branch name]

puis tirez en utilisant $ git pull

[locked branch name] est le nom de la branche sur laquelle l'erreur se produit en raison de la non-concordance des ID de validation.


13

Essayez d'utiliser cette commande dans le dossier racine de votre référentiel git:

rm .git/logs/refs/remotes/origin/master 

Où se trouve ce dossier sur Windows?
Kolob Canyon

Je l'ai trouvé. C'est le répertoire dans lequel vous avez cloné
Kolob Canyon

12

J'ai découvert le même message d'erreur en essayant d'extraire un dépôt Bitbuck dans ma copie lokal. Il n'y a également qu'un seul Branche Master et la commande git pull origin masterconduit à ce message d'erreur

From https://bitbucket.org/xxx
 * branch            master     -> FETCH_HEAD
error: Couldn't set ORIG_HEAD
fatal: Cannot update the ref 'ORIG_HEAD'.

Solution comme suit

  1. git reflog trouver le numéro du dernier commit
  2. git reset --hard <numnber> réinitialiser au dernier commit
  3. git pull origin master tirer à nouveau sans erreur

10

rm .git/refs/remotes/origin/master

Cela fonctionne pour moi!


8

Assurez-vous que l'utilisateur qui exécute le git pullest le même que celui qui a créé le référentiel. Les autorisations de fichier sont incorrectes.


Pour moi, j'ai dû changer le propriétaire des fichiers dans le dépôt que j'essayais de tirer vers le bon utilisateur avec chown. Je pense que c'est essentiellement ce que vous disiez, même si ce n'était pas évident pour moi quand j'ai lu ceci.
Dee

Je suis d'accord avec cela, vérifiez que le propriétaire et le groupe sont définis sur l'utilisateur disposé à extraire le repo ".git" (se produit si vous avez tiré une branche étant "root") un "sudo chown -R" a fait le travail dans mon cas.
jo_


2

Cela m'est arrivé sur OSX où j'utilise un système de fichiers insensible à la casse. D'une manière ou d'une autre, un autre développeur a poussé une branche avec le même nom mais un cas différent: My-Branchvsmy-branch .

J'avais déjà My-Branchvérifié et obtenu l'erreur "impossible de mettre à jour la référence locale" lorsque j'ai fait un tirage probablement parce que le système de fichiers pense My-Branch==my-branch .

Depuis que nous utilisons Github, je pourrais résoudre le problème en supprimant l'une des branches via l'interface graphique de Github.


Dans mon cas, les deux branches en conflit appartenaient à un autre utilisateur, je ne pouvais donc pas en supprimer une. Au lieu de cela, j'ai supprimé le fichier de référence de la branche sous .git \ refs \ remotes, et cela l'a corrigé (temporairement - le problème reviendra à chaque fois que je tire jusqu'à ce que l'autre utilisateur supprime l'une de ses branches).
Jana Mandic

Mon problème était également dû au fait que la succursale locale et la télécommande avaient une capitalisation différente. La suppression de la branche locale, en utilisant la commande prune ci-dessus, puis l'extraction de l'origine a résolu le problème
décrire le

1

Cette erreur avec (impossible de mettre à jour la référence locale) peut également se produire si vous avez récemment changé de mot de passe et qu'il y a des trucs sophistiqués intégrant vos connexions Windows et Linux.


1

Parlant d'un utilisateur de PC - Redémarrez.

Honnêtement, cela a fonctionné pour moi. J'ai résolu deux problèmes git étranges que je pensais être des corruptions de cette façon.


1

C'est probablement une situation très niche, mais: j'exécute Windows dans une VM Parallels sur mon MacBook Pro, avec mes dépôts locaux stockés sur le disque de la VM, qui est partagé avec macOS.

Si j'ai un fichier ouvert dans une application Mac à partir d'un dépôt situé sur la machine virtuelle Windows, j'obtiens parfois l'erreur «Impossible de mettre à jour la référence locale». La solution lorsque cela se produit consiste simplement à fermer le fichier ou à quitter l'application Mac.


1

Que s'est-il passé ici? Les références locales à vos branches distantes ont été modifiées et, par conséquent, lorsque vous exécutez git pull, git ne trouve aucune branche distante correspondante et échoue donc.

git remote prune origin

nettoie réellement ces références locales, puis exécutez git pull .

Suggestion - Veuillez exécuter avec l' --dry-runoption pour la sécurité


0

J'ai eu le même problème sur mon serveur Debian car le disque est plein. Aucun fichier temporaire n'a pu être créé car il ne reste plus d'espace sur l'appareil. Après avoir nettoyé certains fichiers, tout s'est bien passé.


0

Ce travail pour moi

rm .git/logs/refs/remotes/origin/master 

Je doute que cela aide - ou même fonctionne du tout. Pour me convaincre du contraire, veuillez ajouter une explication de la façon dont cela devrait fonctionner et pourquoi cela est censé aider à résoudre le problème. Mettre en évidence les différences avec une autre réponse existante apparemment similaire serait un bonus. Surtout celui qui a été voté par Babak.
Yunnosch le

0

J'ai eu la même erreur, je mettais à jour depuis Eclipse et j'ai eu de nombreuses erreurs. J'ai donc essayé de mettre à jour à partir d'une fenêtre de commande DOS et j'ai eu le même problème.

Ensuite, j'ai essayé la solution "git gc --prune = now" Cela a donné des messages indiquant que les fichiers étaient verrouillés dans le répertoire refs.

Eclipse doit avoir un verrou sur quelque chose dans le répertoire "refs".
La solution que j'ai trouvée était de fermer simplement Eclipse. Ensuite, j'ai mis à jour le référentiel depuis DOS avec une commande "git PULL", et tout a bien fonctionné.


0

Supprimer le fichier .git / logs / refs / remotes / origin / [Nom de la branche verrouillée]


1
Je doute que cela aide - ou même fonctionne du tout. Pour me convaincre du contraire, veuillez ajouter une explication de la façon dont cela devrait fonctionner et pourquoi cela est censé aider à résoudre le problème. Mettre en évidence les différences avec une autre réponse existante apparemment similaire serait un bonus. Surtout celui qui a été voté par Babak.
Yunnosch le
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.