Pregunta Descubra qué rama remota está rastreando una sucursal local


Ver también:
¿cómo puedo obtener git para mostrarme qué ramas están rastreando qué? 

¿Cómo puedo averiguar qué rama remota está rastreando una sucursal local?

¿Tengo que analizar la salida de configuración de git, o hay un comando que haría esto por mí?


571
2017-10-05 05:41


origen


Respuestas:


aquí es un comando que te da todas las ramas de seguimiento (configuradas para 'pull'), mira:

$ git branch -vv
  main   aaf02f0 [main/master: ahead 25] Some other commit
* master add0a03 [jdsumsion/master] Some commit

Tienes que recorrer el SHA y los mensajes de confirmación de envolvimiento largo, pero es rápido para escribir y obtengo las ramas de seguimiento alineadas verticalmente en la tercera columna.

Si necesita información sobre la configuración de 'extracción' y 'inserción' por rama, consulte la otra respuesta en git remote show origin.


Actualizar

A partir de la versión 1.8.5 de git, puede mostrar la rama ascendente con git status y git status -sb


717
2017-09-21 21:54



Dos 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

269
2018-03-17 20:17



creo git branch -av solo te dice qué ramas tienes y cuáles están comprometidas, dejándote deducir qué ramas remotas están rastreando las sucursales locales.

git remote show origin explícitamente le dice qué ramas están rastreando qué ramas remotas. Aquí hay un ejemplo de salida de un repositorio con una confirmación única y una rama remota llamada abranch:

$ git branch -av
* abranch                d875bf4 initial commit
  master                 d875bf4 initial commit
  remotes/origin/HEAD    -> origin/master
  remotes/origin/abranch d875bf4 initial commit
  remotes/origin/master  d875bf4 initial commit

versus

$ git remote show origin
* remote origin
  Fetch URL: /home/ageorge/tmp/d/../exrepo/
  Push  URL: /home/ageorge/tmp/d/../exrepo/
  HEAD branch (remote HEAD is ambiguous, may be one of the following):
    abranch
    master
  Remote branches:
    abranch tracked
    master  tracked
  Local branches configured for 'git pull':
    abranch merges with remote abranch
    master  merges with remote master
  Local refs configured for 'git push':
    abranch pushes to abranch (up to date)
    master  pushes to master  (up to date)

187
2017-10-11 22:25



Actualizar: ¡Bueno, han pasado varios años desde que publiqué esto! Para mi propósito específico de comparar HEAD con la corriente ascendente, ahora uso @{u}, que es un atajo que hace referencia al HEAD de la rama de seguimiento ascendente. (Ver https://git-scm.com/docs/gitrevisions#gitrevisions-emltbranchnamegtupstreamemegemmasterupstreamememuem )

Respuesta original: Me he topado con este problema también. A menudo utilizo múltiples controles remotos en un único repositorio, y es fácil olvidar cuál es el seguimiento de su rama actual. Y a veces es útil saber eso, como cuando quieres ver tus compromisos locales a través de git log remotename/branchname..HEAD.

Todo esto está almacenado en las variables de configuración de git, pero no es necesario analizar la salida de configuración de git. Si invoca git config seguido por el nombre de una variable, simplemente imprimirá el valor de esa variable, sin necesidad de análisis. Con esto en mente, aquí hay algunos comandos para obtener información sobre la configuración de seguimiento de su sucursal actual:

LOCAL_BRANCH=`git name-rev --name-only HEAD`
TRACKING_BRANCH=`git config branch.$LOCAL_BRANCH.merge`
TRACKING_REMOTE=`git config branch.$LOCAL_BRANCH.remote`
REMOTE_URL=`git config remote.$TRACKING_REMOTE.url`

En mi caso, dado que solo estoy interesado en descubrir el nombre de mi control remoto actual, hago esto:

git config branch.`git name-rev --name-only HEAD`.remote

46
2017-08-31 00:37



Las ramas locales y sus controles remotos.

git branch -vv 

Todas las ramas y controles remotos de seguimiento.

git branch -a -vv

Vea dónde las sucursales locales están configuradas explícitamente para empujar y tirar.

git remote show {remote_name}

36
2017-07-16 00:37



Esto le mostrará la rama en la que se encuentra:

$ git branch -vv

Esto mostrará solamente la rama actual en la que se encuentra:

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

por ejemplo:

myremote/mybranch

Puede encontrar la URL de la remoto eso es usado por el rama actual usted está encendido con:

$ git remote get-url $(git for-each-ref --format='%(upstream:short)' $(git symbolic-ref -q HEAD)|cut -d/ -f1)

por ejemplo:

https://github.com/someone/somerepo.git

13
2017-11-16 11:26



No sé si esto cuenta como analizar la salida de git config, pero esto determinará la URL del control remoto que el maestro está rastreando:

$ git config remote. $ (git config branch.master.remote) .url

12
2018-06-21 12:17



Puedes usar git checkout, es decir, "revisa la rama actual". 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'.

10
2017-10-23 10:27