tipos tag remove remote practices etiquetas create crear best git

remove - push tags to github



Averigüe qué sucursal remota está siguiendo una sucursal local (18)

Ver también:
¿Cómo consigo que git me muestre qué sucursales están siguiendo qué?

¿Cómo puedo saber qué sucursal remota está siguiendo una sucursal local?

¿Debo analizar la salida de configuración de git o hay un comando que haga esto por mí?


Creo que git branch -av solo te dice qué sucursales tienes y en qué compromiso están, lo que te permite inferir qué sucursales remotas están siguiendo las sucursales locales.

git remote show origin explícitamente le dice qué ramas están rastreando qué sucursales remotas. Este es un ejemplo de salida de un repositorio con un solo compromiso 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)


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


El siguiente comando será el origen remoto de la bifurcación actual se refiere

git remoto -v

Para agregar una ruta remota,

git remoto agregar origen ruta nombre


Esto te mostrará la rama en la que estás:

$ git branch -vv

Esto mostrará solo 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 averiguar la URL del control remoto que utiliza la rama actual con la que se encuentra:

$ 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


Las sucursales locales y sus mandos a distancia.

git branch -vv

Todas las ramas y mandos a distancia de seguimiento.

git branch -a -vv

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

git remote show {remote_name}


Mejorando esta respuesta , se me ocurrieron estos alias .gitconfig :

branch-name = "symbolic-ref --short HEAD" branch-remote-fetch = !"branch=$(git branch-name) && git config branch./"$branch/".remote || echo origin #" branch-remote-push = !"branch=$(git branch-name) && git config branch./"$branch/".pushRemote || git config remote.pushDefault || git branch-remote-fetch #" branch-url-fetch = !"remote=$(git branch-remote-fetch) && git remote get-url /"$remote/" #" # cognizant of insteadOf branch-url-push = !"remote=$(git branch-remote-push ) && git remote get-url --push /"$remote/" #" # cognizant of pushInsteadOf


No sé si esto cuenta como análisis de 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


Otra forma sencilla es usar

cat .git/config en un repositorio de git

Esto mostrará una lista de detalles de las sucursales locales


Otra manera

git status -b --porcelain

Esto te dará

## BRANCH(...REMOTE) modified and untracked files


Otro método (gracias osse), si solo quieres saber si existe o no:

if git rev-parse @{u} > /dev/null 2>&1 then printf "has an upstream/n" else printf "has no upstream/n" fi


Puede usar git checkout , es decir, "revisar la rama actual". 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 desea encontrar el canal ascendente para cualquier rama (a diferencia de la que está usando), aquí hay una pequeña modificación en 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 llamada YOUR_LOCAL_BRANCH_NAME .


Si está utilizando Gradle,

`` `

def gitHash = new ByteArrayOutputStream() project.exec { commandLine ''git'', ''rev-parse'', ''--short'', ''HEAD'' standardOutput = gitHash } def gitBranch = new ByteArrayOutputStream() project.exec { def gitCmd = "git symbolic-ref --short -q HEAD || git branch -rq --contains "+getGitHash()+" | sed -e ''2,/$d'' -e ''s///(.*//)/////(.*//)/$///2/'' || echo ''master''" commandLine "bash", "-c", "${gitCmd}" standardOutput = gitBranch }

`` `


Uso EasyGit (también conocido como "eg") como una envoltura superligera sobre (o junto a) 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 de la rama actual es "foo"):

pknotz@s883422: (foo) ~/workspace/bd $ eg info Total commits: 175 Local repository: .git Named remote repositories: (name -> location) origin -> git://sahp7577/home/pknotz/bd.git Current branch: foo Cryptographic checksum (sha1sum): bd248d1de7d759eb48e8b5ff3bfb3bb0eca4c5bf Default pull/push repository: origin Default pull/push options: branch.foo.remote = origin branch.foo.merge = refs/heads/aal_devel_1 Number of contributors: 3 Number of files: 28 Number of directories: 20 Biggest file size, in bytes: 32473 (pygooglechart-0.2.0/COPYING) Commits: 62


Yo uso este alias

git config --global alias.track ''!sh -c " if [ /$# -eq 2 ] then echo /"Setting tracking for branch /" /$1 /" -> /" /$2; git branch --set-upstream /$1 /$2; else git for-each-ref --format=/"local: %(refname:short) <--sync--> remote: %(upstream:short)/" refs/heads && echo --URLs && git remote -v; fi " -''

entonces

git track

tenga en cuenta que el script también se puede utilizar para configurar el seguimiento.

Más grandes alias en https://github.com/orefalo/bash-profiles


Here hay un comando que le da todas las ramas de seguimiento (configuradas para ''extracción''), vea:

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

Tienes que leer los SHA y cualquier mensaje de confirmación que contenga un largo envoltorio, 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 el git status git status -sb y el git status -sb


Actualización: Bueno, han pasado varios años desde que publiqué esto! Para mi propósito específico de comparar HEAD con el flujo ascendente, ahora uso @{u} , que es un acceso directo que se refiere al HEAD de la rama de seguimiento ascendente. (Consulte https://git-scm.com/docs/gitrevisions#gitrevisions-emltbranchnamegtupstreamemegemmasterupstreamememuem ).

Respuesta original: He encontrado este problema también. A menudo uso varios controles remotos en un solo repositorio, y es fácil olvidar en cuál de ellos se está rastreando su rama actual. Y a veces es útil saber eso, como cuando desea ver sus 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 es necesario 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 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, ya que solo me interesa averiguar el nombre de mi control remoto actual, hago esto:

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


git branch -r -vv

listará todas las ramas incluyendo el remoto.