Réponse abrégée
git branch -r | grep -v '\->' | sed "s,\x1B\[[0-9;]*[a-zA-Z],,g" | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
git fetch --all
git pull --all
(Il semble que pull récupère toutes les branches de tous les remotes, mais je récupère toujours en premier juste pour être sûr).
Exécutez la première commande uniquement s'il existe des branches distantes sur le serveur qui ne sont pas suivies par vos branches locales.
Réponse complète
Vous pouvez récupérer toutes les branches de toutes les télécommandes comme ceci :
git fetch --all
Il s'agit essentiellement d'un mouvement de puissance .
fetch
met à jour les copies locales des branches distantes, ce qui est toujours sûr pour vos branches locales. MAIS :
-
fetch
ne sera pas mise à jour les succursales locales (qui piste branches distantes) ; si vous voulez mettre à jour vos branches locales, vous devez toujours tirer chaque branche.
-
fetch
ne sera pas créer les succursales locales (qui piste branches distantes), vous devez le faire manuellement. Si vous voulez lister toutes les branches distantes : git branch -a
A mise à jour les branches locales qui suivent les branches distantes :
git pull --all
Toutefois, cela peut être encore insuffisant. Elle ne fonctionnera que pour vos branches locales qui suivent les branches distantes. Pour suivre toutes les branches distantes, exécutez cet oneliner AVANT git pull --all
:
git branch -r | grep -v '\->' | sed "s,\x1B\[[0-9;]*[a-zA-Z],,g" | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
P.S. AFAIK git fetch --all
y git remote update
sont équivalentes.
Kamil Szot commentaire que les gens ont trouvé utile.
J'ai dû utiliser :
for remote in `git branch -r`; do git branch --track ${remote#origin/} $remote; done
parce que votre code a créé des branches locales nommées origin/branchname
et j'obtenais le message "refname 'origin/branchname' is ambiguous" à chaque fois que je faisais que j'y faisais référence.
1 votes
Également abordé à stackoverflow.com/questions/67699/
3 votes
Cette question montre comment obtenir toutes les branches après avoir utilisé la fonction
--single-branch
lors du clonage : stackoverflow.com/questions/17714159/ (git fetch --all
ne fonctionnera jamais si vous n'avez spécifié qu'une seule branche !)3 votes
Vous ne verrez jamais cette sortie car l'astérisque représente la branche qui est actuellement en cours de vérification. Comme vous ne pouvez avoir qu'une seule branche extraite à la fois, vous ne pouvez avoir qu'un seul astérisque à gauche de votre liste de branches.
1 votes
La réponse la mieux classée ci-dessous ne répond pas à l'intention de l'OP. Je vous recommande de regarder stackoverflow.com/a/72156/342839 à la place.
git checkout -b <branch>
semble être la réponse la plus probable.9 votes
J'ai vu beaucoup de réponses, mais aucune n'a mentionné ce qui, à mon avis, est probablement le moyen le plus simple de faire ce que vous voulez :
git clone --bare <repo url> .git
(remarquez que vous devez ajouter "--bare" et ".git" à la fin pour cloner le repo comme un repo "nu"), puisgit config --bool core.bare false
(met l'indicateur "bare" à false), puisgit reset --hard
(déplace le HEAD vers le HEAD actuel du repo). Maintenant, si vousgit branch
vous devriez voir toutes les branches du repo que vous avez cloné.0 votes
Duplicata possible de Comment cloner toutes les branches distantes dans Git ?
1 votes
@GabrielFerraz Pourquoi n'écrivez-vous pas cela comme une réponse ?
2 votes
@pipe : Je pourrais mais il y a déjà une réponse acceptée avec 912 upvotes, plus 20 autres réponses. Je pense qu'il est plus probable que quelqu'un lise mon commentaire qu'une réponse tout au fond de ce fil. Si vous aimez le commentaire, vous pouvez l'upvoter pour que d'autres personnes aient plus de chances de le lire aussi.
6 votes
@GabrielFerraz Alors vous abusez de la fonctionnalité de commentaire sur Stack Overflow. Les utilisateurs peuvent augmenter la note de votre commentaire, mais pas la diminuer.
0 votes
git fetch origin
fera l'affaire.1 votes
git pull origin '*:*'