Question Découvrez quelle branche distante est suivie par une branche locale


Voir également:
comment puis-je obtenir git pour me montrer quelles branches suivent quoi? 

Comment puis-je savoir quelle branche distante est suivie par une branche locale?

Ai-je besoin d'analyser la sortie de git config, ou y a-t-il une commande qui ferait cela pour moi?


571
2017-10-05 05:41


origine


Réponses:


Ici est une commande qui vous donne toutes les branches de suivi (configurées pour 'tirer'), voir:

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

Vous devez parcourir le SHA et tous les messages de validation à enveloppement long, mais il est rapide à taper et les branches de suivi sont alignées verticalement dans la 3ème colonne.

Si vous avez besoin d'informations sur la configuration «pull» et «push» par branche, voir l'autre réponse sur git remote show origin.


Mettre à jour

À partir de git version 1.8.5, vous pouvez afficher la branche en amont avec git status et git status -sb


717
2017-09-21 21:54



Deux choix:

% git rev-parse --abbrev-ref --symbolic-full-name @{u}
origin/mainline

ou

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

269
2018-03-17 20:17



je pense git branch -av vous indique seulement quelles sont les branches que vous avez et à quel niveau elles se trouvent, vous laissant inférer les branches distantes que les branches locales suivent.

git remote show origin indique explicitement quelles branches sont en train de suivre les branches distantes. Voici un exemple de sortie d'un référentiel avec une seule validation et une branche distante appelée 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

contre

$ 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



Mettre à jour: Eh bien, ça fait plusieurs années que j'ai posté ça! Pour mon but spécifique de comparer HEAD à l'amont, j'utilise maintenant @{u}, qui est un raccourci qui se réfère à la tête de la branche de suivi en amont. (Voir https://git-scm.com/docs/gitrevisions#gitrevisions-emltbranchnamegtupstreamemegemmasterupstreamememuem ).

Réponse originale: J'ai également rencontré ce problème. J'utilise souvent plusieurs télécommandes dans un référentiel unique, et il est facile d'oublier celui sur lequel votre branche actuelle est basée. Et parfois, il est utile de le savoir, comme lorsque vous voulez regarder vos commits locaux via git log remotename/branchname..HEAD.

Tout cela est stocké dans les variables git config, mais vous n'avez pas besoin d'analyser la sortie git config. Si vous appelez git config suivi du nom d'une variable, il affichera simplement la valeur de cette variable, sans analyse. Dans cet esprit, voici quelques commandes pour obtenir des informations sur la configuration de suivi de votre branche actuelle:

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`

Dans mon cas, puisque je ne suis intéressé que par trouver le nom de ma télécommande actuelle, je fais ceci:

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

46
2017-08-31 00:37



Les branches locales et leurs télécommandes.

git branch -vv 

Toutes les succursales et télécommandes

git branch -a -vv

Voir où les branches locales sont explicitement configurées pour pousser et tirer.

git remote show {remote_name}

36
2017-07-16 00:37



Cela vous montrera la branche sur laquelle vous êtes:

$ git branch -vv

Cela montrera seulement la branche actuelle sur laquelle vous êtes:

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

par exemple:

myremote/mybranch

Vous pouvez trouver l'URL de la éloigné qui est utilisé par le branche actuelle vous êtes avec:

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

par exemple:

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

13
2017-11-16 11:26



Je ne sais pas si cela compte comme l'analyse de la sortie de git config, mais cela déterminera l'URL de la télécommande que le maître suit:

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

12
2018-06-21 12:17



Vous pouvez utiliser git checkout, c'est-à-dire "vérifier la branche actuelle". C'est un no-op avec des effets secondaires pour montrer les informations de suivi, si elles existent, pour la branche actuelle.

$ git checkout 
Your branch is up-to-date with 'origin/master'.

10
2017-10-23 10:27



Encore une autre façon

git status -b --porcelain

Cela vous donnera

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

9
2017-09-16 16:17



Un autre moyen simple est d'utiliser

cat .git/config dans un repo git

Ceci énumérera les détails pour les branches locales


8
2017-12-10 07:19



Une autre méthode (merci osse), si vous voulez juste savoir si elle existe ou pas:

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

8
2017-08-27 17:26