Pregunta ¿Cómo ver qué ramas de git están rastreando qué rama remota / ascendente?


Sé que puedo hacer git branch --all y eso me muestra ramas locales y remotas, pero no es tan útil al mostrarme las relaciones entre ellos.

¿Cómo enumero las ramas de una manera que muestra qué rama local está rastreando qué control remoto?


603
2018-02-09 21:30


origen


Respuestas:


Es un comando de porcelana, no es bueno si quieres esto para scripting:

git branch -vv   # doubly verbose!

Tenga en cuenta que con git 1.8.3, esa rama ascendente se muestra en azul (ver "¿Qué es esta rama de seguimiento (si acaso) en git?")


Si quieres una salida limpia, mira La respuesta de Arcresu - usa un comando de porcelana que no creo que existiera en el momento en que originalmente escribí esta respuesta, por lo que es un poco más conciso y funciona con las sucursales configuradas para rebase, no solo fusión.


837
2018-02-10 01:02



git remote show origin

Reemplaza el 'origen' con el nombre de tu control remoto.


178
2018-02-09 21:34



Una alternativa a la respuesta de Kubi es echar un vistazo a la .git/config archivo que muestra la configuración del repositorio local:

cat .git/config


70
2018-02-09 21:41



Si miras la página del manual para git-rev-parse, verá que se describe la siguiente sintaxis:

<branchname>@{upstream}, p.ej. master@{upstream}, @{u}

El sufijo @{upstream} a un nombre de rama (forma abreviada)    <branchname>@{u}) se refiere a la rama especificada por la rama   branchname está configurado para construir encima de. A los valores predeterminados de los branchnames faltantes   al actual.

Por lo tanto, para encontrar el flujo ascendente de la rama master, tu harías:

git rev-parse --abbrev-ref master@{upstream}
# => origin/master

Para imprimir la información de cada sucursal, podría hacer algo como:

while read branch; do
  upstream=$(git rev-parse --abbrev-ref $branch@{upstream} 2>/dev/null)
  if [[ $? == 0 ]]; then
    echo $branch tracks $upstream
  else
    echo $branch has no upstream configured
  fi
done < <(git for-each-ref --format='%(refname:short)' refs/heads/*)

# Output:
# master tracks origin/master
# ...

Esto es más limpio que analizar referencias y configuraciones manualmente.


67
2018-06-02 05:00



Para el corriente rama, aquí hay dos buenas opciones:

% git rev-parse --abbrev-ref --symbolic-full-name @{u}
origin/mainline

o

% git for-each-ref --format='%(upstream:short)' $(git symbolic-ref -q HEAD)
origin/mainline

Esa respuesta es también aquí, a una pregunta ligeramente diferente que fue (erróneamente) marcada como un duplicado.


29
2017-10-11 00:31



git for-each-ref --format='%(refname:short) <- %(upstream:short)' refs/heads

mostrará una línea para cada rama local. Una rama de seguimiento se verá así:

master <- origin/master

Un sin seguimiento se verá así:

test <- 

27
2018-06-20 11:34



Para la rama actual, también podrías decir git checkout (sin ninguna rama). Este es un no-operativo con efectos secundarios para mostrar la información de seguimiento, si existe, para la rama actual.

$ git checkout 
Your branch is up-to-date with 'origin/master'.

12
2017-10-23 10:23