ver remotas ramas rama example comandos cambiar git

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



git push (10)

Basado en la respuesta de Olivier Refalo.

if [ $# -eq 2 ] then echo "Setting tracking for branch " $1 " -> " $2 git branch --set-upstream $1 $2 else echo "-- Local --" git for-each-ref --shell --format="[ %(upstream:short) != '''' ] && echo -e ''/t%(refname:short) <--> %(upstream:short)''" refs/heads | sh echo "-- Remote --" REMOTES=$(git remote -v) if [ "$REMOTES" != '''' ] then echo $REMOTES fi fi

Muestra solo local con pista configurada.

Escríbalo en un script llamado git-track en su ruta y obtendrá un comando git track

Una versión más elaborada en https://github.com/albfan/git-showupstream

Sé que puedo hacer git branch --all y eso me muestra tanto las sucursales locales como las remotas, pero no es tan útil para mostrarme las relaciones entre ellas.

¿Cómo enumero las sucursales de manera que muestre qué sucursal local está rastreando qué remoto?


Mucho 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 en sentido ascendente se muestra en azul (consulte " ¿Qué es el seguimiento de esta rama (en todo caso) en git? ")

Si desea una salida limpia, vea la respuesta de arcresu : usa un comando de porcelana que no creo que existiera en el momento en que escribí esta respuesta, por lo que es un poco más conciso y funciona con sucursales configuradas para rebase, no solo para fusionar.


Para la rama actual , 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 también está here , a una pregunta ligeramente diferente que fue (erróneamente) marcada como un duplicado.


Para la rama actual, también podría decir git checkout (sin ninguna rama). Este es un no-op 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''.


Si observa la página de manual de git-rev-parse , verá que se describe la siguiente sintaxis:

<branchname>@{upstream} , por ejemplo, master@{upstream} , @{u}

El sufijo @{upstream} a un nombre de sucursal (forma corta <branchname>@{u} ) se refiere a la rama que la rama especificada por nombre de rama está configurada para construir en la parte superior. Un nombre de sucursal faltante por defecto es el actual.

Por lo tanto para encontrar el upstream del master rama, 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 el análisis de refs y configuración manualmente.


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

cat .git/config


Yo uso este alias

git config --global alias.track ''!f() { ([ $# -eq 2 ] && ( echo "Setting tracking for branch " $1 " -> " $2;git branch --set-upstream $1 $2; ) || ( git for-each-ref --format="local: %(refname:short) <--sync--> remote: %(upstream:short)" refs/heads && echo --Remotes && git remote -v)); }; f''

entonces

git track


git config --get-regexp "branch/.$current_branch/.remote"

le dará el nombre del control remoto que está siendo rastreado

git config --get-regexp "branch/.$current_branch/.merge"

le dará el nombre de la rama remota que está siendo rastreada.

Deberá reemplazar $ current_branch con el nombre de su rama actual. Puede obtener eso dinámicamente con git rev-parse --abbrev-ref HEAD

El siguiente mini-script combina esas cosas. Péguelo en un archivo llamado git-tracking , conviértalo en ejecutable y asegúrese de que esté en su ruta.

entonces puedes decir

$ git tracking <current_branch_name>-><remote_repo_name>/<remote_branch_name>

tenga en cuenta que el nombre de la rama remota puede ser diferente del nombre de la rama local (aunque generalmente no lo es). Por ejemplo:

$git tracking xxx_xls_xslx_thing -> origin/totally_bogus

Como puede ver en el código, la clave para esto es extraer los datos de la configuración de git. Sólo uso sed para borrar los datos extraños.

#!/bin/sh current_branch=$(git rev-parse --abbrev-ref HEAD) remote=$(git config --get-regexp "branch/.$current_branch/.remote" | sed -e "s/^.* //") remote_branch=$(git config --get-regexp "branch/.$current_branch/.merge" | / sed -e "s/^.* //" -e "s/refs//.*////") echo "$current_branch -> $remote/$remote_branch"


git remote show origin

Reemplace ''origen'' con cualquiera que sea el nombre de su control remoto.


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

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

master <- origin/master

Un no rastreador se verá así:

test <-