Question Comment savoir quelle branche locale suit quelle branche distante dans Git?


J'aimerais savoir s'il existe un moyen de savoir quelle branche locale suit quelle branche distante dans Git.

J'utilise un serveur distant nommé "origine".


231
2017-08-27 01:04


origine


Corrigez-moi si je me trompe, mais n'est-ce pas une branche distante nommée origine par défaut plutôt que le serveur? - Chris Halcrow


Réponses:


En utilisant l'exemple de ma copie de Puppet extraite du référentiel Git en amont sur Github.com ...

$ git remote show origin
* remote origin
  Fetch URL: git://github.com/reductivelabs/puppet.git
  Push  URL: git://github.com/reductivelabs/puppet.git
  HEAD branch: master
  Remote branches:
    0.24.x                 tracked
    0.25.x                 tracked
    2.6.x                  tracked
    master                 tracked
    next                   tracked
    primordial-ooze        tracked
    reins-on-a-horse       tracked
    testing                tracked
    testing-17-march       tracked
    testing-18-march       tracked
    testing-2-april        tracked
    testing-2-april-midday tracked
    testing-20-march       tracked
    testing-21-march       tracked
    testing-24-march       tracked
    testing-26-march       tracked
    testing-29-march       tracked
    testing-31-march       tracked
    testing-5-april        tracked
    testing-9-april        tracked
    testing4268            tracked
  Local branch configured for 'git pull':
    master merges with remote master
  Local ref configured for 'git push':
    master pushes to master (up to date)

Alors si je devais exécuter ce qui suit:

$ git checkout -b local_2.6 -t origin/2.6.x 
Branch local_2.6 set up to track remote branch 2.6.x from origin.
Switched to a new branch 'local_2.6'

Et enfin, relancez le git remote show origin commande encore je verrai alors ce qui suit vers le bas:

  Local branches configured for 'git pull':
    local_2.6 merges with remote 2.6.x
    master    merges with remote master

197
2017-08-27 03:03



Cela signifie-t-il que vous pouvez suivre toutes les branches distantes de la marionnette bien que vous disposiez de quelques branches locales? Quels sont les nombreux signes "suivis" que vous voyez dans le résultat de la commande? "suivi" par quelle branche locale? - PJ.
Les branches distantes sont suivies en ce que si vous faites un git fetch ou git pull les mises à jour des branches distantes seront suivies dans votre référentiel cloné. Les branches locales ne sont que cela, les branches locales des branches distantes et donc les mises à jour des branches distantes seront suivies et fusionnées lorsque la commande appropriée pour le faire sera donnée. J'inclus explicitement l'option '-t' lors de la création de la branche locale afin de m'assurer qu'elle suit bien la branche d'où elle provient. N'oubliez pas qu'une branche locale peut également suivre une autre branche locale, de sorte qu'elle ne doit pas nécessairement être une branche distante. - Jeremy Bouse
@PJ: Le terme "piste" a deux significations distinctes dans Git. Les lignes "suivies" dans git remote show remote-name faire référence à "Suivi des branches" (instantanés de branches de référentiels distants). Les lignes «fusionne avec» font référence aux branches locales qui ont une «Branche en amont» configuration (faite avec avec le --track/-t option de branche de git ou git checkout et donc souvent confondu avec “traquer des branches”). - Chris Johnsen
"branche de suivi à distance"est l'entrée du glossaire à jour pour les" branches de suivi "mentionnées ci-dessus. Le document a été mis à jour en 8b3f3f84. - ento


Pour toutes les branches:

git branch -avv

Pour les agences locales uniquement:

git branch -lvv

Pour les agences distantes uniquement:

git branch -rvv

vous montre toutes les branches ainsi que le nom de la branche en amont.


122
2018-02-14 16:02



C'est de loin la réponse la plus simple et la plus complète!
Sur la version 1.7.7.5 de git, cela me montre la branche locale et le sha-1 indiqué, mais ne montre pas la branche distante suivie ... - mpontillo
Fonctionne pour moi sur la version 1.7.4.1 de git Le deuxième 'v' est requis pour afficher la branche de suivi à distance. - Peter Johnson
réduire la production git branch -lvv montrer seulement les branches locales avec l'amont pourrait être utile - A B
^git branch -vv travaille pour moi... - notacouch


Jeremy Bouse illustre Comment git remote show affiche les informations de suivi. Cela devrait suffire si vous ne souhaitez que les informations destinées à la consommation humaine.

Si vous prévoyez d’utiliser les informations dans un contexte automatisé (par exemple, un script), vous devez utiliser le niveau inférieur («plomberie»). git for-each-ref au lieu.

% git remote show origin
* remote origin
⋮
  Local branches configured for 'git pull':
    master merges with remote master
    pu     merges with remote pu
⋮
% git for-each-ref --format='%(refname:short) <- %(upstream:short)' refs/heads
master <- origin/master
pu <- origin/pu

le git for-each-ref appris le %(upstream) jeton dans Git 1.6.3. Avec les versions antérieures de Git, vous devrez extraire les informations de suivi avec git config branch.<name>.remote et git config branch.<name>.merge (utilisant probablement git for-each-ref construire les commandes pour chaque nom de branche locale).


52
2017-08-27 03:18



Le résultat de vos réponses est beaucoup plus succinct et facile à suivre, vous obtenez donc le vote positif :) - CubanX
Pour le rendre moins succinct, tout en fournissant un moyen agréable de vérifier visuellement que les noms distants sont identiques aux noms des branches locales, un git gotcha commun: in bash git for-each-ref --format=$'\n'' '' '' '' '' '' ''/%(refname:short);%(upstream:short)' refs/heads | tr ';' $'\n' - hobs


Pour une branche particulière, vous pouvez utiliser git rev-parse avec le @{u} ou @{upstream} suffixe sur le nom de la branche, par exemple:

$  git rev-parse --symbolic-full-name master@{u}
refs/remotes/github-mhl/master

... ou pour la forme abrégée, ajouter --abbrev-ref

$ git rev-parse --symbolic-full-name --abbrev-ref master@{u}
github-mhl/master

Vous pouvez généralement utiliser le branch@{upstream} la syntaxe partout où un commit est attendu.


18
2018-05-01 09:18



+1 Votre réponse m'a donné exactement ce dont j'avais besoin: git rev-parse --symbolic-full-name HEAD contre. git rev-parse --symbolic-full-name HEAD@{u}, Merci! - Tino


J'utilise le script shell suivant (nommé git-tracks) pour afficher la branche distante suivie par la branche actuelle:

#!/bin/sh -e
branch=$(git symbolic-ref HEAD)
branch=${branch##refs/heads/}
remote=$(git config "branch.${branch}.remote")
remoteBranch=$(git config "branch.${branch}.merge")
remoteBranch=${remoteBranch##refs/heads/}

echo "${remote:?}/${remoteBranch:?}"

Cela pourrait également utiliser le mentionné git for-each-ref, mais j’ai trouvé l’accès direct un peu plus simple que le filtrage de la sortie pour la branche actuelle.


10
2018-01-21 14:26



Vous pourriez envisager d'utiliser "set -e" en haut du script. Cela vous permettra de supprimer toutes les instances de "|| exit $?" tout en conservant le même comportement d'échec précoce. - John Whitley
@ JohnWhitley: Merci, j'ai modifié ma réponse. Je sais à propos de set -e, mais s’en tient généralement à la vérification explicite. Mais dans ce cas, c'est vraiment mieux. - Ingo Karkat
Ne travaille pas pour moi git version 1.9.4. Echos rien :( - Ain


.git/config fichier fournira également les informations de branche de suivi comme

[remote "Hub"]
    url = ssh://xxxx/tmp/Hub
    fetch = +refs/heads/*:refs/remotes/Hub/*
[branch "develop"]
    remote = Hub
    merge = refs/heads/develop
[branch "Dev1"]
    remote = Test
    merge = refs/heads/Dev1
[remote "Test"]
    url = ssh://xxxx/tmp/gittesting/Dev1GIT
    fetch = +refs/heads/*:refs/remotes/Test/*

8
2017-10-11 12:59





git branch -vv

montre exactement ce que vous demandez. Il montre les branches locales avec la branche distante correspondante qu'elles suivent.


5
2018-05-07 07:50