Ver también:
¿Cómo puedo ver qué ramas de Git están rastreando qué rama remota / aguas arriba?
¿Cómo puedo averiguar qué sucursal remota está rastreando una sucursal local?
¿Necesito analizar la git config
salida o hay un comando que haga esto por mí?
git
branch
git-remote
Solo lectura
fuente
fuente
git remote show origin
. La respuesta principal en la otra pregunta es un script bash envuelto alrededor de la respuesta simple aquí, que podría ser útil para algunos. Esperemos que esta pregunta no se cierre por completo.Respuestas:
Aquí hay un comando que le brinda todas las ramas de seguimiento (configuradas para 'pull'), consulte:
Tiene que pasar por el SHA y cualquier mensaje de confirmación de envoltura larga, pero es rápido de escribir y obtengo las ramas de seguimiento alineadas verticalmente en la tercera columna.
Si necesita información sobre la configuración 'pull' y 'push' 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
ygit status -sb
fuente
git branch -av
ogit remote show origin
, lo que le brindagit status
ygit status -sb
, por lo tanto, una vez que actualice a 1.8.5.x, esta pregunta (y respuesta) es irrelevante.Dos opciones:
o
fuente
%(refname:short)
es el nombre de la referencia actual dentro--format
.git help revisions
(una de las partes poco conocidas pero más útiles de los documentos) y busqueupstream
.git diff `git rev-parse --abbrev-ref --symbolic-full-name @{upstream}`
echo 'git for-each-ref --format=\'%(refname:short) -> %(upstream:short)\' refs/heads/$1' > ~/bin/git-show-upstream; chmod +x ~/bin/git-show-upstream
git for-each-ref --format='%(upstream:short)' $(git rev-parse --symbolic-full-name SOMEBRANCH)
flujo ascendente de alguna otra sucursal, una variante de la segunda opción es: reemplazar SOMEBRANCH con el nombre de la sucursal, o "HEAD" para la sucursal actualCreo que
git branch -av
solo te dice qué ramas tienes y en qué compromiso están, dejándote inferir qué ramas remotas están rastreando las ramas locales.git remote show origin
le dice explícitamente qué ramas están rastreando qué ramas remotas. Aquí hay un ejemplo de salida de un repositorio con un solo commit y una rama remota llamadaabranch
:versus
fuente
git remote show origin
muestra ramas locales y lo que rastrean para empujar y tirar.origin
, mientras que en realidad podría ser cualquier cosa (por ejemplo, controles remotos múltiples, con diferentes ramas que rastrean ramas de diferentes controles remotos).Actualización: Bueno, ¡han pasado varios años desde que publiqué esto! Para mi propósito específico de comparar HEAD con aguas arriba, ahora uso
@{u}
, que es un atajo que se refiere a HEAD de la rama de seguimiento de aguas arriba. (Ver https://git-scm.com/docs/gitrevisions#gitrevisions-emltbranchnamegtupstreamemegemmasterupstreamememuem ).Respuesta original: También me he encontrado con este problema. A menudo uso múltiples controles remotos en un solo 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 confirmaciones locales a través de
git log remotename/branchname..HEAD
.Todo esto se almacena en las variables de configuración de git, pero no tiene que analizar la salida de configuración de git. Si invoca git config seguido del nombre de una variable, solo imprimirá el valor de esa variable, no se requiere análisis. Con eso en mente, aquí hay algunos comandos para obtener información sobre la configuración de seguimiento de su sucursal actual:
En mi caso, dado que solo estoy interesado en averiguar el nombre de mi control remoto actual, hago esto:
fuente
git name-rev --name-only HEAD
no te dirá en qué rama estás realmente. Para eso acabo de usargit branch | grep '^\*' | cut -d' ' -f2
@{u}
alias / atajo y eso es exactamente lo que estaba buscando! No hay razón para comparar con la rama maestra si solo desea determinar si necesita tirar o no.@{u}
es la bomba Y ha existido desde 1.7.0, lo que significa que si no está disponible en un git que alguien está usando en 2018, probablemente se deba actualizar.Las sucursales locales y sus controles remotos.
Todas las ramas y controles remotos de seguimiento.
Vea dónde las ramas locales están configuradas explícitamente para push y pull.
fuente
Esto le mostrará la rama en la que se encuentra:
Esto mostrará solo la rama actual en la que se encuentra:
por ejemplo:
Puede encontrar la URL del control remoto que utiliza la rama actual con la que se encuentra:
por ejemplo:
fuente
Puede usar
git checkout
, es decir, "verifique la rama actual". Este es un no-op con efectos secundarios para mostrar la información de seguimiento, si existe, para la rama actual.fuente
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:
fuente
git config branch.$(git symbolic-ref -q HEAD).remote
si solo desea el nombre del control remoto que se rastrea de la rama actual,git config remote.$(git config branch.$(git symbolic-ref -q HEAD).remote).url
para la URL.--short
opción para que funcione. Entonces, para obtener el nombre remoto de la rama actual:git config branch.$(git symbolic-ref -q --short HEAD).remote
y para obtener la URL del control remoto de la rama actual:git config remote.$(git config branch.$(git symbolic-ref -q --short HEAD).remote).url
Otra forma
Esto te dará
fuente
Otra forma simple es usar
cat .git/config
en un repositorio gitEsto enumerará los detalles de las sucursales locales.
fuente
type .git/config
en lugar decat .git/config
, por supuesto, en la línea de comandos llanura ..Otro método (gracias osse), si solo quieres saber si existe o no:
fuente
git branch -vv | grep 'BRANCH_NAME'
git branch -vv
: Esta parte mostrará todas las sucursales locales junto con su sucursal aguas arriba.grep 'BRANCH_NAME'
: Filtrará la rama actual de la lista de ramas.fuente
enumerará todas las ramas, incluso las remotas.
fuente
Enumera sucursales locales y remotas:
Salida:
fuente
La salida v2 de git-status porcelain (legible por máquina) se ve así:
Y para obtener la rama solo aguas arriba:
Si la rama no tiene flujo ascendente, el comando anterior producirá una salida vacía (o fallará
set -o pipefail
).fuente
Si desea encontrar el flujo ascendente para cualquier rama (en lugar de solo en la que se encuentra), aquí hay una pequeña modificación a la respuesta de @ cdunn2001:
git rev-parse --abbrev-ref --symbolic-full-name YOUR_LOCAL_BRANCH_NAME@{upstream}
Eso le dará el nombre de la sucursal remota para la sucursal local nombrada
YOUR_LOCAL_BRANCH_NAME
.fuente
Puedes probar esto:
branch_name
necesita ser reemplazado con su sucursalfuente
git remote show origin
- si se llamamerges
oconfigure
?Yo uso este alias
entonces
tenga en cuenta que el script también se puede usar para configurar el seguimiento.
Más alias geniales en https://github.com/orefalo/bash-profiles
fuente
Uso EasyGit (también conocido como "por ejemplo") como una envoltura súper liviana en la parte superior (o al costado de) Git. EasyGit tiene un subcomando de "información" que le brinda todo tipo de información súper útil, incluida la rama de seguimiento remoto de las sucursales actuales. Aquí hay un ejemplo (donde el nombre actual de la sucursal es "foo"):
fuente
Mejorando esta respuesta , se me ocurrieron estos
.gitconfig
alias:fuente
Si estás usando Gradle,
fuente
El siguiente comando se referirá a la bifurcación actual de origen remoto.
Para agregar una ruta remota,
fuente