git ready

aprendiendo git de a un commit por vez
por Nick Quaranto, traducido por Matías Flores

listando ramas remotas

publicado el 13 Feb 2009

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!