A ramificação remota não está aparecendo no "git branch -r"

138

Fui enviado para um repositório remoto do Bitbucket e, recentemente, um colega enviou um novo ramo que ele criou para o mesmo repositório.

Estou tentando buscar as alterações que ele enviou.

 $ git branch -a
 * master
 localbranch1
 localbranch2
 remotes/origin/master

$ git branch -r origem / mestre

Na interface da Web da Bitbucket, posso ver o ramo que ele criou. Como posso fazer isso?

Próxima tentativa:

$ git fetch bitbucket
Password for 'https://[email protected]':
From https://bitbucket.org/user/repo
 * branch            HEAD       -> FETCH_HEAD

Se o ramo que ele criou se chama new_branch_b , devo esperar o seguinte?

$ git branch -r
origin/master
origin/new_branch_b

Terceira tentativa:

$ git remote update
Fetching bitbucket
Password for 'https://[email protected]':
From https://bitbucket.org/user/repo
 * branch            HEAD       -> FETCH_HEAD

$ git branch -r
  origin/master

Quarta tentativa:

[remote "bitbucket"]
url = https://[email protected]/user/repo.git

Liguei para o controle remoto em bitbucketvez de origem (pelo menos é o que me lembro; configurei-o há um tempo)

Quinta tentativa:

Atualizei a configuração remota do Bitbucket conforme a resposta de kan :

$ git config -e

[remote "bitbucket"]
    url = https://[email protected]/user/repo.git
    fetch = +refs/heads/*:refs/remotes/bitbucket/*

Para a maioria das pessoas, isso será chamado de origem:

[remote "origin"]
    url = https://[email protected]/user/repo.git
    fetch = +refs/heads/*:refs/remotes/origin/*

Mais tarde,

$ git remote update

Fetching bitbucket
Password for 'https://[email protected]':
remote: Counting objects: 48, done.
remote: Compressing objects: 100% (32/32), done.
remote: Total 35 (delta 21), reused 0 (delta 0)
Unpacking objects: 100% (35/35), done.
From https://bitbucket.org/user/repo
 * [new branch]      branch_name1 -> origin/branch_name1
 * [new branch]      branch_name2    -> origin/branch_name2

.... e assim por diante.

Eu acho git fetch originque também funcionaria git remote update.

feargal
fonte
1
Legal, mas talvez tivesse mais sentido usar refs/remotes/bitbucket/*em vez de refs/remotes/origin/*.
kan
Obrigado, devidamente anotado sobre a consistência dos nomes. Provavelmente faz mais sentido mudar o bitbucket para a origem! Convenção e tudo o que :)
Feargal
1
git fetch originfaz o trabalho #
Dish

Respostas:

107

A remoteseção também especifica regras de busca. Você pode adicionar algo assim para buscar todas as ramificações do controle remoto:

fetch = +refs/heads/*:refs/remotes/origin/*

(Ou substitua originpor bitbucket.)

Leia sobre isso aqui: 10.5 Git Internals - The Refspec

kan
fonte
3
Isso corrigiu meu problema de ramificação em andamento no Git, que eu tive por semanas. De repente, todo o material de atualização remota do git começou a funcionar. Obrigado!
PålOliver
2
Por alguma razão, parecia: fetch = +refs/heads/master:refs/remotes/origin/masterpara mim. Substituindo masterpor *corrigido o meu problema.
Sebastian Blask
2
Isso é muito útil se você tiver convertido um clone raso em um raso.
Warpzit
@kan Você sabe por que isso acontece às vezes? Aconteceu comigo quando git cloneum projeto. Não me lembro de ter feito nada de especial com o meu idiota local.
DotnetCarpenter
@dotnetCarpenter Não tenho certeza ... nunca me aconteceu inesperadamente. É possível que tenha clonesido interrompido e depois retomado? Ou outra coisa acessou o repositório simultaneamente?
kan
217

Atualize seu controle remoto se você ainda não o fez:

$ git remote update
$ git branch -r
Bruno
fonte
1
Estou usando o cliente GitHub no Win e às vezes ele não atualiza as ramificações remotas. A primeira linha "atualização remota do git" funciona como um encanto. Fácil e limpo
Stefano BUORA
depois que git remote updateeu posso ver o novo ramo na interface do usuário. Obrigado
Tinkaal Gogoi
Isso não ajudou.
dKab
Eu acho que já tinha buscado o ramo com sucesso, mas só precisava vê-lo listado git branch -r. No git-scm.com/docs/git-branch , diz "Opção -r faz com que as ramificações de rastreamento remoto sejam listadas e a opção -a mostra as ramificações local e remota". git remote updatebusca todas as ramificações de todos os controles remotos listados em git remote -v.
Rock Lee
Depois de executar isso, eu fui capaz de executar git checkout origin/mastere, em seguida git branch master; git checkout master
ramifiquei
34

Se você clonar com o --depthparâmetro, ele definirá .git/confignão buscar todas as ramificações, mas apenas mestre.

Você pode simplesmente omitir o parâmetro ou atualizar o arquivo de configuração de

fetch = +refs/heads/master:refs/remotes/origin/master

para

fetch = +refs/heads/*:refs/remotes/origin/*
DonPaulie
fonte
1
Obrigado! Sua resposta corrige o problema facilmente e parece ser a maneira correta de fazê-lo. Mas você deve adicionar o arquivo de configuração .git/config, para que as pessoas possam encontrá-lo.
DotnetCarpenter
19

Eu tive o mesmo problema. Parece que a solução mais fácil é apenas remover o controle remoto, ler e buscar.

jessicah
fonte
1
Estava gastando muito tempo para encontrar esta resposta. Isso funcionou sem nenhum problema. Obrigado. :)
kisanme
1
Trabalhou para mim também, muito estranho que este resolveu
CailinP
1
git remote -vmostrará seus controles remotos para que você possa se apossar do URL, git remote rm originremovê-lo git remote add origin <url>e adicioná-lo novamente.
Siddhartha
Isso funcionou para mim. Eu tinha um submódulo git que, de alguma forma, não buscava nenhuma ramificação remota além do master. Remover e adicioná-lo novamente resolveu.
Zamrony P. Juhara 13/08/19
funcionou para mim, mas agora recebo um avisowarning: ignoring broken ref refs/remotes/origin/HEAD
dafnahaktana 12/07
7

Infelizmente, git branch -ae git branch -rfazer não mostrar-lhe todas as filiais remotas, caso você não tenha executado um "git fetch".

git remote show originfunciona consistentemente o tempo todo. Também git show-refmostra todas as referências no repositório Git. No entanto, funciona exatamente como o git branchcomando.

Thushan
fonte