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.