A veces es necesario saber qué ramas existen en un repositorio remoto para poder traerlas a nuestra pc, integrar nuestras modificaciones, etc. Si usas GitHub o gitweb para hostear tus repositorios, es bastante fácil determinar los nombres de las ramas disponibles, pero si necesitas una solución más genérica o algo para usar en tus propios scripts, no es tan sencillo.
ACTUALIZACION: Los comentarios recibidos me han enseñado varias cosas… tal parece que con Git siempre hay más de una forma de hacer lo mismo. En nuestro caso, la forma más fácil de listar las ramas disponibles en un repositorio es utilizando las distintas opciones del comando git branch
. -a
, por ejemplo, muestra todas las ramas locales y remotas, mientras que -r
muestra unicamente las ramas remotas.
$ git branch * master $ git branch -a * master origin/1-2-stable origin/2-0-stable origin/2-1-stable origin/2-2-stable origin/3-0-unstable origin/HEAD origin/master $ git branch -r origin/1-2-stable origin/2-0-stable origin/2-1-stable origin/2-2-stable origin/3-0-unstable origin/HEAD origin/master
Una vez que conoces el nombre de la rama, es bastante sencillo hacer el checkout. Si ves el resultado de los comandos en color, entonces también es fácil determinar cuáles son las ramas remotas que no existen localmente, ya que éstas se muestran en rojo.
También hay otra forma de listar las ramas remotas utilizando los comandos git remote
y git ls-remote
. El primero muestra bastante información sobre el respositorio remoto y cómo se relaciona con tu propio repositorio, mientras que el segundo comando simplemente lista todas las referencias a ramas y tags que conoce.
$ git remote show origin * remote origin URL: git://github.com/rails/rails.git Remote branch merged with 'git pull' while on branch master master Tracked remote branches 1-2-stable 2-0-stable 2-1-stable 2-2-stable 3-0-unstable master $ git ls-remote --heads origin 5b3f7563ae1b4a7160fda7fe34240d40c5777dcd refs/heads/1-2-stable 71926912a127da29530520d435c83c48778ac2b2 refs/heads/2-0-stable 2b158543247a150e8ec568becf360e7376f8ab84 refs/heads/2-1-stable b0792a3e7be88e3060af19bab01cd3d26d347e4c refs/heads/2-2-stable d6b9f8410c990b3d68d1970f1461a1d385d098d7 refs/heads/3-0-unstable f04346d8b999476113d5e5a30661e07899e3ff80 refs/heads/master
El comando ls-remote
muestra el SHA1 del último commit de cada ref, por lo tanto es bastante sencillo determinar cuál es el commit que necesitas. La opción --heads
lista unicamente las ramas, ya que el mismo comando también puede listar los tags.
Si conoces otras formas de usar estos comandos o una forma más simple de listar las ramas disponibles en un repositorio remoto, ¡déjanos un comentario!