Como listar todas as ramificações remotas no Git 1.7+?


634

Eu tentei git branch -r, mas isso lista apenas as ramificações remotas que eu localizei localmente. Como encontro a lista daqueles que não encontrei? (Não importa para mim se o comando lista todas as ramificações remotas ou apenas as que não são rastreadas.)


11
Quer dizer que você tenha modificado o refspec padrão, de modo que git fetche git remote updatenão buscar todos os ramos do controle remoto? Porque senão você fossem obter, em seguida, usar git branch -r...
Cascabel

2
Eu devo ter. git branch -restava apenas me mostrando ramos remotos que eu havia rastreado localmente. Está funcionando melhor agora.
James A. Rosen

Respostas:


804

Para a grande maioria [1] dos visitantes aqui, a resposta correta e mais simples para a pergunta "Como listar todas as ramificações remotas no Git 1.7+?" é:

git branch -r

Para uma pequena minoria [1] git branch -r não funciona. Se git branch -rnão funcionar, tente:

git ls-remote --heads <remote-name>

Se git branch -rnão funcionar, então talvez como Cascabel diz "você modificou o refspec padrão, de modo que git fetche git remote updatenão buscar todos os remoteramos 's" .


[1] No momento da redação desta nota de rodapé de 2018 a fevereiro, observei os comentários e vi que os git branch -rtrabalhos para a grande maioria (cerca de 90% ou 125 dos 140 ).

Se git branch -rnão funcionar, a verificação git config --get remote.origin.fetchcontém um curinga ( *) conforme esta resposta


15
Você também pode fazer git ls-remote [url]para que você não tem que clonar pela primeira vez :)
Zsub

142
Essa resposta é correta, mas enganosa, a primeira coisa que os usuários que chegam dos mecanismos de busca devem ver: git branch -rcomo essa é a resposta correta e mais simples, o solicitante teve um caso especial em que modificou o comportamento dele git branch -rque a maioria dos usuários que acessam aqui não have
Stephan

24
@ Stephan: você tem certeza disso? git branch -rtambém não funcionou para mim. É apenas listar os ramos já rastreados localmente. Mas git ls-remote --headslistou todas as ramificações disponíveis no repositório remoto ...
rexford 17/10

2
Se alguém deseja buscar nas ramificações listadas via git ls-remote(e não listadas em git branch -r), é necessário executar git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"antes da busca, conforme descrito em stackoverflow.com/a/26649770/873282 .
koppor

11
Não se esqueça de fazer git fetch --allantes para obter todas as ramificações remotas atuais.
A. Attia

173

remote show mostra todas as ramificações no controle remoto, incluindo aquelas que não são rastreadas localmente e até as que ainda não foram buscadas.

git remote show <remote-name>

Ele também tenta mostrar o status dos ramos em relação ao seu repositório local:

> git remote show origin
* remote origin
  Fetch URL: C:/git/.\remote_repo.git
  Push  URL: C:/git/.\remote_repo.git
  HEAD branch: master
  Remote branches:
    branch_that_is_not_even_fetched new (next fetch will store in remotes/origin)
    branch_that_is_not_tracked      tracked
    branch_that_is_tracked          tracked
    master                          tracked
  Local branches configured for 'git pull':
    branch_that_is_tracked merges with remote branch_that_is_tracked
    master                 merges with remote master
  Local refs configured for 'git push':
    branch_that_is_tracked pushes to branch_that_is_tracked (fast-forwardable)
    master                 pushes to master                 (up to date)

Exatamente. Não buscado, não rastreado localmente.
Thufir

3
branch_that_is_not_tracked tracked?
Piotr Dobrogost

3
@PiotrDobrogost Yes! branch_that_is_not_trackedé uma ramificação que não é rastreada por nenhuma ramificação git local. No entanto, foi buscado no repositório local (portanto, há uma ramificação remota). Por alguma razão estranha, git remote showchama esse estado tracked, mesmo que não haja ramificação local que rastreie o controle remoto. Nesse caso, o oposto de trackedé new, significando "não buscado".
Klas Mellbourn

isso não funciona por meio de programação, muito difícil de analisar
Alexander Mills

Isso pegou um caso especial que eu tinha, onde eu havia puxado uma ramificação remota localmente e depois removida no controle remoto. Em seguida, git branch -rsugere que ainda há uma ramificação remota, mas git remote show originmostra isso refs/remotes/origin/my-now-dead-branch stale (use 'git remote prune' to remove). Muito mais útil!
Icc97 19/1018

54
git branch -a | grep remotes/*

10
Isso é basicamente equivalente ao git branch -rqual o OP disse que não era bom o suficiente.
Cascabel

9
na verdade, ambos git branch -ae git branch -rlistar todas as ramificações remotas para mim, não tenho certeza se o que o OP disse é verdadeiro. Acabei de configurar um repositório de teste e verifiquei isso (só tinha origem / mestre de rastreamento mestre, mas ainda via todas as ramificações remotas com os dois sinalizadores).
Idan K

2
Parece que isso não lista todas as ramificações remotas se eu clonar em um repositório puxado existente e depois apontar manualmente a origem no servidor git. A resposta aceita trata desse caso.
Nielsbot 17/10/2013

Esta solução não parece listar ramificações remotas criadas desde a última vez que busquei.
Anubian Noob 06/07/2015

O estranho: há anos que eu git fetchsegui seguido git branch -a, que só recentemente começou a falhar para mim. Talvez o comportamento git tenha mudado?
Sebastian Mach

39

O uso git branch -rlista todas as ramificações remotas e git branch -alista todas as ramificações no local e no remoto. Essas listas ficam desatualizadas. Para manter essas listas atualizadas, execute

git remote update --prune

que atualizará sua lista de filiais locais com todas as novas do controle remoto e removerá as que não estão mais lá. A execução deste comando de atualização sem o --prune recuperará novas ramificações, mas não excluirá as que não estão mais no controle remoto.

Você pode acelerar esta atualização especificando um controle remoto; caso contrário, ele obterá atualizações de todos os controles remotos que você adicionou, assim

git remote update --prune origin

Isso corrigiu o meu problema - 'git branch -r' agora funciona para mim.
Francis Norton

27

Mas

git branch -ar

deve fazê-lo.


41
Passar nos dois argumentos é redundante. -rretorna apenas ramificações remotas. -aretorna ramificações locais e remotas. Assim, git branch -ae git branch -arambos produzem a mesma saída.
Walter Roman

19

Você também pode fazer git fetchseguido de um git branch -r. Sem buscar, você não verá os ramos mais atuais.


git fetch --allter todos os ramos atuais
A. Attia

19

Ramificação Git - Ramificações remotas

git ls-remote

Documentação Git .


git ls-remote --heads para obter resultados mais específicos #
Wolfgang Fahl

1
Este é o único comando que também lista os meus ramos eu acidentalmente empurrado sem heads/nos refs/heads/features/my-branch, muito obrigado!
quer


9

TL; TR;

Esta é a solução do seu problema:

git remote update --prune    # To update all remotes
git branch -r                # To display remote branches

ou:

git remote update --prune    # To update all remotes
git branch <TAB>             # To display all branches

5

O melhor comando para executar é git remote show [remote] . Isso mostrará todas as filiais, remotas e locais, rastreadas e não rastreadas.

Aqui está um exemplo de um projeto de código aberto:

> git remote show origin
* remote origin
  Fetch URL: https://github.com/OneBusAway/onebusaway-android
  Push  URL: https://github.com/OneBusAway/onebusaway-android
  HEAD branch: master
  Remote branches:
    amazon-rc2                   new (next fetch will store in remotes/origin)
    amazon-rc3                   new (next fetch will store in remotes/origin)
    arrivalStyleBDefault         new (next fetch will store in remotes/origin)
    develop                      tracked
    master                       tracked
    refs/remotes/origin/branding stale (use 'git remote prune' to remove)
  Local branches configured for 'git pull':
    develop merges with remote develop
    master  merges with remote master
  Local refs configured for 'git push':
    develop pushes to develop (local out of date)
    master  pushes to master  (up to date)

Se apenas queremos obter as ramificações remotas, podemos usar grep. O comando que queremos usar seria:

grep "\w*\s*(new|tracked)" -E

Com este comando:

> git remote show origin | grep "\w*\s*(new|tracked)" -E
    amazon-rc2                   new (next fetch will store in remotes/origin)
    amazon-rc3                   new (next fetch will store in remotes/origin)
    arrivalStyleBDefault         new (next fetch will store in remotes/origin)
    develop                      tracked
    master                       tracked

Você também pode criar um alias para isso:

git config --global alias.branches "!git remote show origin | grep \w*\s*(new|tracked) -E"

Então você pode simplesmente correr git branches.




4

Basta executar um git fetchcomando. Ele puxará todas as ramificações remotas para o repositório local e fará uma git branch -alista de todas as ramificações.


1

Se há uma ramificação remota que você sabe que deve ser listada, mas não está sendo listada, convém verificar se sua origem está configurada corretamente com isso:

git remote show origin

Se tudo estiver bem, talvez você deva executar uma atualização:

git remote update

Supondo que seja executado com êxito, você poderá fazer o que as outras respostas dizem:

git branch -r

1

Usando este comando,

git log -r --oneline --no-merges --simplify-by-decoration --pretty=format:"%n %Cred CommitID %Creset: %h %n %Cred Remote Branch %Creset :%d %n %Cred Commit Message %Creset: %s %n"

CommitID       : 27385d919
Remote Branch  : (origin/ALPHA)
Commit Message :  New branch created

Ele lista todas as ramificações remotas, incluindo as mensagens de confirmação e os IDs de confirmação referidos pelas ramificações remotas.


1

Eu usaria:

git branch -av

Este comando não apenas mostra a lista de todas as ramificações, incluindo ramificações remotas /remote, mas também fornece o *feedback sobre o que você atualizou e os últimos comentários de confirmação.


0

Verifique se a origem remota que você está listando é realmente o repositório desejado e não um clone mais antigo.


0

Acabei fazendo um pipeline de bagunça para conseguir o que queria. Acabei de mesclar ramos do controle remoto de origem:

git branch -r --all --merged \
    | tail -n +2 \
    | grep -P '^  remotes/origin/(?!HEAD)' \
    | perl -p -e 's/^  remotes\/origin\///g;s/master\n//g'

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.