Question Comment voir quelles branches git suivent quelle branche distante / en amont?


Je sais que je peux faire git branch --all et cela me montre à la fois des branches locales et éloignées, mais ce n'est pas très utile pour me montrer les relations entre elles.

Comment puis-je lister les branches d'une manière qui montre quelle branche locale est en train de suivre quelle télécommande?


603
2018-02-09 21:30


origine


Réponses:


Très bien une commande de porcelaine, pas bon si vous le souhaitez pour les scripts:

git branch -vv   # doubly verbose!

Notez qu'avec git 1.8.3, cette branche amont est affichée dans bleu (voir "Quel est ce suivi de branche (si quelque chose) dans git?")


Si vous voulez une sortie propre, voir la réponse d'arcresu - il utilise une commande de porcelaine que je ne crois pas exister au moment où j'ai écrit cette réponse, donc c'est un peu plus concis et fonctionne avec des branches configurées pour rebaser, pas seulement fusionner.


837
2018-02-10 01:02



git remote show origin

Remplacez 'origine' par quel que soit le nom de votre télécommande.


178
2018-02-09 21:34



Une alternative à la réponse de Kubi est de regarder le .git/config fichier qui montre la configuration du dépôt local:

cat .git/config


70
2018-02-09 21:41



Si vous regardez la page de manuel pour git-rev-parse, vous verrez la syntaxe suivante est décrite:

<branchname>@{upstream}, par exemple. master@{upstream}, @{u}

Le suffixe @{upstream} à un nom de branche (forme courte    <branchname>@{u}) renvoie à la succursale que la succursale désignée par   Le nom de la branche est défini pour se superposer. Un nom de branche manquant par défaut   à l'actuel.

Donc pour trouver l'amont de la branche master, vous feriez:

git rev-parse --abbrev-ref master@{upstream}
# => origin/master

Pour imprimer les informations pour chaque branche, vous pouvez faire quelque chose comme:

while read branch; do
  upstream=$(git rev-parse --abbrev-ref $branch@{upstream} 2>/dev/null)
  if [[ $? == 0 ]]; then
    echo $branch tracks $upstream
  else
    echo $branch has no upstream configured
  fi
done < <(git for-each-ref --format='%(refname:short)' refs/heads/*)

# Output:
# master tracks origin/master
# ...

C'est plus propre que l'analyse syntaxique et la configuration manuelle.


67
2018-06-02 05:00



Pour le actuel branche, voici deux bons 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

Cette réponse est aussi ici, à une question légèrement différente qui a été (à tort) marquée comme doublon.


29
2017-10-11 00:31



git for-each-ref --format='%(refname:short) <- %(upstream:short)' refs/heads

affichera une ligne pour chaque branche locale. Une branche de suivi ressemblera à:

master <- origin/master

Un non-suivi ressemblera à:

test <- 

27
2018-06-20 11:34



Pour la branche actuelle, vous pouvez également dire git checkout (sans aucune branche). 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'.

12
2017-10-23 10:23