Como faço para listar todos os ramos remotos no Git 1.7+?
15 answers
Para a grande maioria[1] dos visitantes aqui, a resposta correta e mais simples para a pergunta " Como faço para listar todos os ramos remotos no Git 1.7+?"é:
git branch -r
Para uma pequena minoria[1]git branch -r
não funciona. Se git branch -r
não funcionar tente:
git ls-remote --heads <remote-name>
Se git branch -r
não funciona, então, talvez, como Cascabel diz "que você tenha modificado o padrão refspec, de modo que git fetch
e git remote update
não buscar todos os remote
's branches " .
[1] Como a redação desta nota de rodapé 2018-Fev, eu olhei os comentários e ver que o git branch -r
funciona para a grande maioria (cerca de 90% ou 125 de 140).
Se git branch -r
não funcionar, verifique git config --get remote.origin.fetch
contém uma placa especial (*
) de acordo com esta resposta
remote show
mostra todos os ramos no remoto, incluindo aqueles que não são rastreados localmente e mesmo aqueles que ainda não foram obtidos.
git remote show <remote-name>
Ele também tenta mostrar o estado dos ramos em relação ao seu repo 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)
git branch -a | grep remotes/*
Usando git branch -r
lista todos os ramos remotos e git branch -a
Lista todos os ramos locais e remotos. Estas listas ficam desactualizadas. Para manter estas listas atualizadas, execute
git remote update --prune
Que irá actualizar a sua lista de ramificações local com todas as novas do remoto e remover todas as que já não existem. A execução deste comando de actualização sem o --prune irá obter novos ramos, mas não irá apagar os que já não estão no comando remoto.
Pode acelerar esta actualização especificando um comando remoto, caso contrário, ele irá obter atualizações de todos os comandos que você adicionou, como por exemplo
git remote update --prune origin
Mas
git branch -ar
Deve fazê-lo.
Também pode fazer git fetch
seguido de um git branch -r
. Sem a obtenção, não irá ver os ramos mais actuais.
A maneira mais simples que encontrei:
git branch -a
O melhor comando a executar é git remote show [remote]
. Isto irá mostrar todos os ramos, remotos e locais, rastreados e não rastreados.
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 queremos apenas obter os ramos remotos, podemos usar grep
. O comando que gostaríamos de 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
Também pode criar um pseudónimo para isto:
git config --global alias.branches "!git remote show origin | grep \w*\s*(new|tracked) -E"
Então podes correr.
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
Com GitBash, pode usar:
Git branch-a
git branch -r --all --merged \
| tail -n +2 \
| grep -P '^ remotes/origin/(?!HEAD)' \
| perl -p -e 's/^ remotes\/origin\///g;s/master\n//g'
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
Lista todos os ramos remotos, incluindo as mensagens de commit, o ID de commit que são referidos por ramos remotos.
Certifique-se que a origem remota que está a listar é realmente o repositório que deseja e não um clone mais antigo.
Tenta
git branch -at