tag - ¿Cómo enumero todas las sucursales remotas en Git 1.7+?
git remote (15)
Asegúrese de que el origen remoto que está listando es realmente el repositorio que desea y no un clon anterior.
He intentado git branch -r
, pero eso solo enumera las ramas remotas que he rastreado localmente. ¿Cómo encuentro la lista de los que no tengo? (No me importa si el comando enumera todas las ramas remotas o solo aquellas que están sin seguimiento).
Con GitBash, puedes usar:
rama git -a
El mejor comando para ejecutar es git remote show [remote]
. Esto mostrará todas las sucursales, remotas y locales, rastreadas y sin seguimiento.
Aquí hay un ejemplo de un proyecto de código abierto:
> 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)
Si solo queremos obtener las sucursales remotas, podemos usar grep
. El comando que quisiéramos usar sería:
grep "/w*/s*(new|tracked)" -E
Con 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
También puedes crear un alias para esto:
git config --global alias.branches "!git remote show origin | grep /w*/s*(new|tracked) -E"
Entonces puedes correr solo git branches
.
El uso de git branch -r
enumera todas las sucursales remotas y git branch -a
enumera todas las sucursales en local y remoto. Estas listas se desactualizan sin embargo. Para mantener estas listas actualizadas, ejecute
git remote update --prune
que actualizará su lista de sucursales locales con todas las nuevas desde el control remoto y eliminará las que ya no estén allí. Al ejecutar este comando de actualización sin la --prune se recuperarán nuevas sucursales pero no se eliminarán las que ya no se encuentran en el control remoto.
Puede acelerar esta actualización especificando un control remoto; de lo contrario, extraerá las actualizaciones de todos los controles remotos que haya agregado.
git remote update --prune origin
La forma más sencilla que encontré:
git branch -a
Pero
git branch -ar
Deberías hacerlo.
También puedes hacer git fetch
seguido de una git branch -r
. Sin fetch no verás las ramas más actuales.
Terminé haciendo una tubería de shell de desorden para obtener lo que quería, simplemente fusioné las ramas del control remoto de origen:
git branch -r --all --merged /
| tail -n +2 /
| grep -P ''^ remotes/origin/(?!HEAD)'' /
| perl -p -e ''s/^ remotes//origin////g;s/master/n//g''
Utilizando 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
Enumere todas las sucursales remotas, incluidos los mensajes de confirmación, ID de confirmación que son referidos por sucursales remotas
tratar
git branch -at
remote show
muestra todas las sucursales en el control remoto, incluidas las que no se rastrean localmente e incluso las que aún no se han recuperado.
git remote show <remote-name>
También intenta mostrar el estado de las sucursales en relación con su repositorio 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)
Para la gran mayoría [1] de visitantes aquí, la respuesta más sencilla y correcta a la pregunta "¿Cómo enumero todas las sucursales remotas en Git 1.7+?" es:
git branch -r
Para una pequeña minoría [1] git branch -r
no funciona. Si git branch -r
no funciona, intente:
git ls-remote --heads <remote-name>
Si git branch -r
no funciona, entonces tal vez como Cascabel dice "ha modificado el refspec predeterminado, de modo que git fetch
y git remote update
no recuperen todas las sucursales del remote
" .
[1] Al momento de escribir esta nota de pie de página 2018-febrero, miré los comentarios y observé que la git branch -r
funciona para la gran mayoría (alrededor del 90% o 125 de 140 ).
Si git branch -r
no funciona, verifique git config --get remote.origin.fetch
contiene un comodín ( *
) según esta respuesta
TL; TR;
Esta es la solución de su problema:
git remote update --prune # To update all remotes
git branch -r # To display remote branches
o:
git remote update --prune # To update all remotes
git branch <TAB> # To display all branches
git branch -a | grep remotes/*