Este parece ser um erro comum por diferentes causas.
Eu tenho um repositório git simples chamado "kiflea.git", eu o clono assim:
git clone git://kipdola.be/kiflea.git
Então git me diz: warning: remote HEAD refers to nonexistent ref, unable to checkout.
E sim, não há arquivos versionados no mapa, exceto para o diretório .git. De qualquer forma, a única coisa que preciso fazer é:
cd kiflea
git checkout master
E funciona, todos os arquivos estão lá. Mas pensei que a clonagem de um repo verifica automaticamente o master, então o que está acontecendo exatamente e como faço para corrigir isso?
Percebi que, depois de fazer a parte git checkout master
, isso é adicionado ao meu arquivo de configuração .git local:
[branch "master"]
remote = origin
merge = refs/heads/master
Provavelmente é interessante saber que este repositório git costumava ser um repositório svn em um passado distante.
Ps: ao navegar no repositório básico usando gitweb, há claramente um master
branch lá: http://kipdola.be/gitweb/?p=kiflea.git;a=summary
git ls-remote origin
mostra a você?checkout master
bit:25f600739343a7ce32d6311a1e6140870774810b refs/heads/master
HEAD
. Você tem acesso direto a ele? Se sim, veja aquigit clone -b master <url> <dir>
Respostas:
Os
warning: remote HEAD refers to nonexistent ref, unable to checkout.
meios que o controle remoto (nua) repositório contém referência filial no arquivo chamadoHEAD
que não corresponde a qualquer ramo publicada no mesmo repositório.Observe que o aviso significa apenas que git não fez checkout. O repositório clonado está bem. Basta fazer
git branch -a
para ver possíveis ramificações egit checkout the-branch-you-want
contornar o problema.Isso geralmente acontece porque o conteúdo padrão para esse arquivo (
.git/HEAD
ou simplesHEAD
para repositórios vazios) éref: refs/heads/master
que diz que se alguém está indo paraclone
este repositório, eles devem por padrão clonar o branchrefs/heads/master
. Por padrão, o Git criará um branch local sem orefs/heads/
prefixo (ou seja,master
por padrão). Tentegit help symbolic-ref
obter mais informações.O problema com esta situação é que o Git não fornece um método para modificar simbólicas remotas, então você usa algo que o provedor de hospedagem Git implementou (por exemplo, Configurações - Branch padrão no GitHub se você tiver direitos de administrador) ou você tem que usar o nome do branch
master
como o branch padrão (porque esse é o valor padrão para aquela referência simbólica).Se você tiver acesso shell ao seu repositório git remoto, você pode simplesmente
cd path/to/bare/git/repo; git symbolic-ref HEAD refs/heads/XYZ
ondeXYZ
está o nome do branch que deseja usar por padrão.Uma maneira de resolver este problema é criar um novo
git push name-of-the-remote my-special-branch-name
repositório vazio sem commits e então fazer o que resultará em um repositório vazio contendo um único branch,my-special-branch-name
mas oHEAD
ref simbólico ainda contém o valor padrão apontando paramaster
. Como resultado, você receberá o aviso mencionado anteriormente.fonte
checkout
. O repositório clonado está bem. Façagit branch -a
para ver possíveis ramos egit checkout the-branch-you-want
"consertar" o problema.git clone -b master
(ou qualquer que seja o nome do ramo existente).cd path/to/bare/git/repo; git symbolic-ref HEAD refs/heads/XYZ
ondeXYZ
é o nome do branch padrão que você deseja usar segit clone
for feito sem o-b
sinalizador. Se você tiver algum outro problema, por favor, faça uma nova pergunta em vez de adicionar perguntas como comentários.Eu tive o mesmo problema porque não estava usando mais o
master
branch e ele se perdeu no meu repositório local e remoto.O repositório remoto ainda tinha o
HEAD
conjunto paramaster
, eu mudei para um do branch remoto que eu realmente uso e tudo funciona bem.Se você pode acessar seu repositório remoto:
remote_repo.git
;HEAD
arquivoref: refs/heads/master
pararef: refs/heads/your_branch
fonte
broken_branch
porrefs/heads/master
.cd path/to/bare/git/repo; git symbolic-ref HEAD refs/heads/XYZ
ondeXYZ
é o nome do branch padrão que você deseja usar segit clone
for feito sem o-b
sinalizador, como eu disse em outro comentário.Sim, isso está relacionado ao seu clone git tentando fazer checkout em um branch diferente do master. Apenas faça isso
Isso o ajudará a clonar o branch exato por meio de seu nome de branch.
fonte
Mesmo que esse erro tenha sido exibido - meu projeto ainda estava conectado ao repositório correspondente - eu executei o
git branch
comando e vi os branches apropriados - então eu executeigit checkout *branchname
e BOOM - tudo estava bem.fonte
Definitivamente, há algo errado com seu repositório remoto. Você pode consertá-lo fazendo um novo clone do repositório. Além disso, enviar um novo commit para o branch master também pode funcionar.
fonte
Eu acho que é o líder
*
no log de confirmação que de alguma forma está enganando o servidor remoto.Posso navegar pela interface da web do repo usando alguns dos links de menu, mas outros falham com um
404 - Unknown commit object
ou semelhante, principalmente na página de resumo.Veja se você pode corrigir a última mensagem de confirmação e então forçar o envio da atualização para ver se isso corrige. Pode haver um bug no demônio do servidor. Se corrigir, valeria a pena relatar na lista git [email protected] (apenas mensagens de texto simples)
fonte
Eu tive o mesmo problema ao criar um repositório básico.
Resolvi isso apenas clonando o repo, criando um branch master local e enviando o master para o repo remoto.
1) clonar o repo
2) criar um branch master localmente.
3) cometer algo na filial local
4) Empurre o mestre local no remoto
fonte
Se não houver um branch master realmente disponível, verifique o seguinte; Se houver um arquivo denominado 'pack-refs' dentro da pasta '.git', abra-o e você poderá encontrar todas as referências listadas.
Algo como abaixo;
Em seguida, use;
Ou
para verificar a versão necessária. Obrigado.
fonte
Eu parecia consertar com:
Isso criou o mestre padrão, e então eu poderia verificar meus outros branches
fonte
No meu caso, o repo estava vazio.
fonte
Para Gitlab, mesmo que ele mostre que você está em um branch padrão (por exemplo
master
), você pode não estar realmente nele, configurando-o novamente, corrija-o, assim:asd
master
asd
master
asd
ramoPronto, agora seu branch padrão é
master
fonte