buscar no git não obtém todos os ramos

201

Eu clonei um repositório, após o qual alguém criou uma nova ramificação, na qual gostaria de começar a trabalhar. Eu li o manual, e parece bem fácil. Estranhamente, não está funcionando, e todas as postagens que encontrei sugerem que estou fazendo a coisa certa. Então, vou me sujeitar à rejeição, porque deve haver algo obviamente errado com isso:

A ação correta parece ser

git fetch
git branch -a
* master
  remotes/origin/HEAD --> origin/master
  remotes/origin/master
git checkout -b dev-gml origin/dev-gml

Neste ponto, há um problema, por algum motivo, depois git fetchque não consigo ver a ramificação remota dev-gml. Por que não? Se eu clonar o repositório recentemente, ele estará lá, então certamente a ramificação remota existe:

$ mkdir ../gitest
$ cd ../gitest
$ git clone https://github.com/example/proj.git
Cloning into proj...
remote: Counting objects: 1155, done.
remote: Compressing objects: 100% (383/383), done.
remote: Total 1155 (delta 741), reused 1155 (delta 741)
Receiving objects: 100% (1155/1155), 477.22 KiB | 877 KiB/s, done.
Resolving deltas: 100% (741/741), done.
$ cd projdir
$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/dev-gml
  remotes/origin/master

Eu tentei git update, git pull, git fetch --all, git pretty-pleaseem todas as permutações possíveis ...

Edward Newell
fonte
44
O que git config --get remote.origin.fetchproduz? Se não for +refs/heads/*:refs/remotes/origin/*, provavelmente deveria ser.
torek
Sim, isso é exatamente o que produz #
Edward Newell
3
Exatamente o mesmo problema, mas o comentário acima resolveu! Eu tive +refs/heads/master:refs/remotes/origin/mastercom em mastervez de*
Mirko
1
Mesmo problema para mim, mas nenhuma das sugestões nesta página o resolve. Esquisito.
Magnus em Magnus
1
@ thoni56: Sim, isso provavelmente se deve a um clone superficial.
Trần Việt Hoàng

Respostas:

384

O problema pode ser visto ao verificar a remote.origin.fetchconfiguração
(as linhas que começam com $são solicitações do bash com os comandos que eu digitei. As outras linhas são a saída resultante)

$ git config --get remote.origin.fetch
+refs/heads/master:refs/remotes/origin/master

Como você pode ver, no meu caso, o controle remoto foi configurado para buscar a ramificação principal especificamente e somente. Corrigi-o conforme abaixo, incluindo o segundo comando para verificar os resultados.

$ git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
$ git config --get remote.origin.fetch
+refs/heads/*:refs/remotes/origin/*

O curinga, *claro, significa tudo nesse caminho.

Infelizmente, vi esse comentário depois de já ter pesquisado e encontrado a resposta por tentativa e erro.

AndASM
fonte
2
Provavelmente, essa deve ser a resposta aceita, pois na verdade resolveu o problema na postagem original.
LocalPCGuy
1
apenas uma nota lateral, eu tive que adicionar o --replace-allparâmetro para substituir todos os valores da configuração para o meuremote.origin.fetch
Garis M Suero
4
Note que isso pode acontecer se você tiver clonado seu repositório com apenas um único ramo, por exemplogit clone <url> --branch <branch> --single-branch [<folder>]
Narretz
2
Resposta da Check Stux
Newbee
5
Isso pode acontecer quando você clonar comgit clone ... --depth 1
Anatolii Bivol
107

Eu tive esse problema hoje em um repo.

Não era o +refs/heads/*:refs/remotes/origin/*problema conforme a solução principal.

O sintoma era simplesmente isso git fetch originougit fetch simplesmente não parecia fazer nada, embora houvesse ramificações remotas para buscar.

Depois de tentar várias coisas, removi o controle remoto de origem e o recriei. Isso parece ter consertado. Não sei porque.

remover com: git remote rm origin

e recrie com: git remote add origin <git uri>

stux
fonte
14
Eu tinha a configuração correta do git para remote.origin.fetchie +refs/heads/*:refs/remotes/origin/*. A solução acima me ajudou.
precisa saber é o seguinte
9
Esta solução foi a correta para mim também. Isso é lamentável, pois indica que há um bug no Git.
Robert Oschler
2
Isso também resolveu meu problema. Eu também parecem ter esta questão em uma máquina com versão git 2.19.1v mas a experiência não funcionavam em outra máquina com git versão 2.17.1
jerpint
6
git remote update origintrabalhou para mim. Eu acho que algo precisava ser revigorado?
Felipe Gerard
2
git remote update originnão funcionou para mim, mas remover e adicionar o controle remoto funcionou.
Anatoliy Kmetyuk 9/12/19
58

Atualização remota

Você precisa correr

git remote update

ou

git remote update <remote> 

Em seguida, você pode executar git branch -rpara listar as ramificações remotas.

Fazer check-out de uma nova filial

Para rastrear uma filial (nova) remota como filial local:

git checkout -b <local branch> <remote>/<remote branch>

ou (às vezes não funciona sem o extra remotes/):

git checkout -b <local branch> remotes/<remote>/<remote branch>

Cheatsheets úteis do git

philipvr
fonte
5
Mas meu problema é que não consigo fazer check-out de uma filial remota existente , porque meu cliente git não acha que ela existe. Veja minha pergunta. Observe que quando eu corro git fetchseguido por git branch -aele não mostra todos os ramos. Eu tive que excluir meu diretório de trabalho e clonar novamente para ver a filial dev-gmlque um colaborador criou. Funcionou desta vez, mas estaremos ramificando frequentemente!
Edward Newell
Hey @EdwardNewell, thnks para a resposta, apenas para que você sabe, o seu link cheat.errtheblog.com/s/git está morto para mim ...
Kjellski
Já faz muito tempo desde a primeira vez que fiz essa pergunta, e acabei de receber um ping porque alguém postou novamente. Estou aceitando esta resposta, embora originalmente nada realmente funcionasse para mim. A razão pela qual finalmente marquei isso correto é porque suspeito que o que ele escreveu ao lado Edit:muito bem pode ter funcionado. É o que eu tentaria se ainda estivesse enfrentando o problema. HTH
Edward Newell
Para constar, o pouco que me ajudou aqui é git remote update origin. Isso tornou visível o ramo ausente git branch -l -r. (I fez olhada git config --get remote.origin.fetche a saída foi +refs/heads/*:refs/remotes/origin/*como esperado.)
Robert Dodier
9

escreva do terminal

git fetch --prune.

Funciona bem.

Samet ÖZTOPRAK
fonte
1
Obrigado! Eu tentei muitas coisas e pensei que eu iria apenas dar a este um tiro ... Agora para procurar o que eu realmente fiz ...
MadTurki
O que isso faz?
Adam Orlov
Leva todas as ramificações disponíveis. Olhe para a cabeça.
Samet ÖZTOPRAK 26/11
4

Para torná-lo mais específico Crie uma ramificação de rastreamento, o que significa que agora você está rastreando uma ramificação remota.

git branch --track branch remote-branch
git branch --track exp remotes/origin/experimental

Após o qual você pode

git branch   # to see the remote tracking branch "exp" created .

Então, para trabalhar nesse ramo, faça

git checkout branchname
git checkout exp

Depois de fazer alterações na ramificação. Você pode obter git fetch e git merge com sua ramificação de rastreamento remoto para mesclar suas alterações e enviar para a ramificação remota como abaixo.

git fetch origin
git merge origin/experimental  
git push origin/experimental

Espero que ajude e lhe dê uma idéia de como isso funciona.

Swapna
fonte
1

Eu tive um problema semelhante, no entanto, no meu caso, eu poderia puxar / empurrar para a filial remota, mas git statusnão mostrei o estado da filial local nos remotos.

Além disso, no meu caso git config --get remote.origin.fetch, não retornou nada

O problema é que houve um erro de digitação no .git/configarquivo na linha de busca do respectivo bloco remoto. Provavelmente algo que eu adicionei por engano anteriormente (às vezes, olho diretamente para esse arquivo ou até o edito)

Portanto, verifique se sua entrada remota no .git/configarquivo está correta, por exemplo:

[remote "origin"]
    url = https://[server]/[user or organization]/[repo].git
    fetch = +refs/heads/*:refs/remotes/origin/*
Juh_
fonte
0

Isso pode ser devido a um momento de palma da mão: se você alternar entre vários clones, é fácil encontrar-se na árvore de origem incorreta tentando puxar um ramo inexistente. É mais fácil quando os clones têm nomes semelhantes ou os repositórios são clones distintos para o mesmo projeto de cada um dos múltiplos colaboradores. Obviamente, um novo clone do Git parece resolver esse "problema" quando o problema real está perdendo o foco, o contexto de trabalho ou ambos.

jerseyboy
fonte
0

Eu tive que entrar nos meus Repositórios Remotos do GitExtensions, pois nada aqui parecia estar funcionando. Lá vi que duas filiais não tinham repositório remoto configurado. depois de ajustar, fica da seguinte maneirainsira a descrição da imagem aqui

O ramo de aviso noExternal3ainda é exibido como não tendo um repositório remoto. Não tenho certeza de qual combinação de comandos bash teria encontrado ou ajustado isso.

Maslow
fonte
0

Hoje tive o mesmo problema ao configurar meu repositório do zero. Eu tentei de tudo, nada funcionou, exceto remover a origem e adicioná-la novamente.

git remote rm origin
git remote add origin [email protected]:web3coach/the-blockchain-bar-newsletter-edition.git

git fetch --all
// Ta daaa all branches fetched
Lukas Lukac
fonte
-1

Tivemos o mesmo problema e você tem que usar

git fetch

git push origin branch_name

git branch -r

Espero que isso ajude alguém que enfrenta o mesmo problema

chazefate
fonte