Erro Git no git pull (não é possível atualizar a referência local)


116

Eu só tenho o branch master e recebo este erro toda vez que tento "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)

e quando eu faço "git pull origin master" eu obtenho:

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

Eu tenho procurado, mas não consigo encontrar o porquê


2
Onde está o repositório local? Você o criou como um usuário diferente daquele que está usando para executar o pull? Parece um problema de permissão de arquivo.
tpg2114

Sim, você está certo depois de dizer que o proprietário dos arquivos do projeto era outro usuário, agora minha pergunta parece tão tola, mas você me deu a resposta, por favor, responda para escolhê-la como a melhor;)
user115561

@ tpg2114 adicione isto como uma resposta para escolhê-la
user115561

Respostas:


263

Minha equipe e eu encontramos este erro, incapaz de atualizar a referência local , ao fazer um pull no SourceTree.

Nós costumavamos :

git gc --prune=now

Isso remove todos os objetos de referência duplicados que devem corrigir o problema.

Aqui estão alguns links onde você pode aprender mais sobre referências e remoção de git :

dica da semana

documentação do git-prune

referências git


1
Funcionou para mim também, mesma mensagem, Sourcetree no Windows 7
James Westgate

2
também comecei a ter esse problema. Muitíssimo obrigado! funcionou perfeitamente!
ddrossi93

3
Pode precisar de ambos os comandos: git gc --prune=now git remote prune originfrom stackoverflow.com/questions/2998832/…
bryan

1
Eu tentei git remote prune origine não funcionou para mim. Mas depois disso tentei git gc --prune=now, e funcionou! Não tenho certeza se os dois eram necessários nessa ordem ou apenas este.
Anurag

1
Outro problema crítico com gitisso leva a uma postagem útil do StackOverflow com uma solução concisa.
ijoseph

129

Resolvi como abaixo:

git remote prune origin


6
Eureka! Realmente funcionou. Tem algo a ver com ramificações remotas renomeadas ou algo assim. Não vou tentar explicar.
TheSoftwareJedi de

8
Isso funcionou por mim, git gc --prune=nownão fez nada
Josh G

3
mesmo. isso funciona para mim. git gc --prune = now não funcionou para mim.
Tony

16

com gitbach line commande, use git update-refpara atualizar a referência do seu branch local:

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

então puxe usando $ git pull

[locked branch name] é o nome do branch em que o erro está ocorrendo devido à incompatibilidade de IDs de confirmação.


13

Tente usar este comando na pasta raiz do repositório git:

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

Onde está essa pasta no Windows?
Kolob Canyon

Eu encontrei. É qualquer diretório para o qual você clonou
Kolob Canyon

12

Eu descobri a mesma mensagem de erro ao tentar puxar de um Bitbuck Repo para minha cópia local. Também há apenas um Branche Master e o comando git pull origin masterpara esta mensagem de erro

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

Solução como segue

  1. git reflog encontre o número do último commit
  2. git reset --hard <numnber> redefinir para o último commit
  3. git pull origin master puxe novamente sem erro

10

rm .git/refs/remotes/origin/master

Funciona para mim!


8

Certifique-se de que o usuário que está executando o git pullseja o mesmo usuário que criou o repositório. As permissões do arquivo estão incorretas.


Para mim, eu tive que mudar o proprietário dos arquivos no repositório que eu estava tentando obter para o usuário correto com chown. Acho que isso é basicamente o que você estava dizendo, embora não tenha sido óbvio para mim quando li isso.
Dee

Eu concordo com isso, verifique se o proprietário e o grupo estão configurados para o usuário que deseja obter o repo ".git" (acontece se você puxou um branch sendo "root") um "sudo chown -R" funcionou no meu caso.
jo_


2

Isso aconteceu comigo no OSX, onde uso um sistema de arquivos que não diferencia maiúsculas de minúsculas. De alguma forma, outro desenvolvedor empurrou um ramo com o mesmo nome mas caso diferente: My-Branchvs my-branch.

Eu já fiz My-Branchcheck-out e recebi o erro "não foi possível atualizar o ref local" quando fiz um pull, provavelmente porque o sistema de arquivos pensa My-Branch== my-branch.

Como usamos o Github, eu poderia resolver o problema excluindo um dos ramos por meio da GUI do Github.


No meu caso, os dois branches conflitantes pertenciam a outro usuário, então não pude excluir um. Em vez disso, excluí o arquivo ref do branch em .git \ refs \ remotes, e isso corrigiu (temporariamente - o problema voltará cada vez que eu puxar até que o outro usuário exclua um de seus branches).
Jana Mandic

Meu problema também era devido à filial local e remota com capitalização diferente. Excluir o branch local, usando o comando prune acima e, em seguida, fazer check-out da origem resolveu
descritivo de

1

Este erro com (não é possível atualizar a referência local) também pode ocorrer se você tiver alterado suas senhas recentemente e houver algumas coisas sofisticadas integrando seus logins do Windows e do Linux.


1

Falando de um usuário de PC - Reinicialize.

Honestamente, funcionou para mim. Resolvi dois problemas estranhos do git que pensei serem corrupções dessa forma.


1

Esta é provavelmente uma situação de nicho, mas: Eu executo o Windows em uma VM Parallels no meu MacBook Pro, com meus repos locais armazenados no disco da VM, que é compartilhado com o macOS.

Se eu tiver um arquivo aberto em um aplicativo Mac de um repositório localizado na VM do Windows, às vezes recebo o erro "não foi possível atualizar o ref local". A solução quando isso acontecer é simplesmente fechar o arquivo ou sair do aplicativo Mac.


1

O que aconteceu aqui? As referências locais para seus branches remotos foram alteradas e, portanto, quando você executa git pull, git não encontra nenhum branch remoto correspondente e, portanto, falha.

git remote prune origin

realmente limpa essas referências locais e, em seguida, executa git pullnovamente.

Sugestão - execute com --dry-runopção de segurança


0

Eu tive o mesmo problema no meu servidor debian porque o disco está cheio. Nenhum arquivo temporário pode ser criado porque não há espaço restante no dispositivo. Depois de limpar alguns arquivos, funcionou bem.


0

Este trabalho para mim

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

Duvido que isso ajude - ou mesmo funcione. Para me convencer do contrário, adicione uma explicação de como isso deve funcionar e por que deveria ajudar com o problema. Destacar as diferenças para outra resposta existente aparentemente semelhante seria um bônus. Especialmente aquele votado por Babak.
Yunnosch

0

Eu tive o mesmo erro, estava atualizando de dentro do Eclipse e recebi muitos erros. Tentei atualizar a partir de uma janela de comando do DOS e tive o mesmo problema.

Então tentei a solução "git gc --prune = now" Isso deu mensagens de que os arquivos estavam bloqueados no diretório refs.

O Eclipse deve ter travado em algo no diretório "refs".
A solução que encontrei foi simplesmente fechar o Eclipse. Então eu atualizei o repositório do DOS com um comando "git PULL" e tudo funcionou bem.


0

Remova o arquivo .git / logs / refs / remotes / origin / [Nome da filial bloqueada]


1
Duvido que isso ajude - ou mesmo funcione. Para me convencer do contrário, adicione uma explicação de como isso deve funcionar e por que deveria ajudar com o problema. Destacar as diferenças para outra resposta existente aparentemente semelhante seria um bônus. Especialmente aquele votado por Babak.
Yunnosch
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.