J'ai cloné un dépôt Git, qui contient environ cinq branches. Cependant, lorsque je fais git branch
, je ne vois qu'une seule d'entre elles :
$ git branch
* master
Je sais que je peux faire git branch -a
pour voir toutes les branches, mais comment puis-je tirer toutes les branches localement pour que lorsque je fais git branch
, il affiche ce qui suit ?
$ git branch
* master
* staging
* etc...
Vous pouvez récupérer toutes les branches de toutes les télécommandes comme ceci :
git fetch --all
C'est en fait un [power move] (https://www.atlassian.com/git/tutorials/syncing/git-fetch).
fetch
met à jour les copies locales des branches distantes, donc c'est toujours sûr pour vos branches locales Mais :
fetch
ne mettra pas à jour les branches locales (qui suivent les branches distantes) ; si vous voulez mettre à jour vos branches locales, vous devez toujours tirer chaque branche.
fetch
ne va pas créer des branches locales (qui suivent les branches distantes), vous devez le faire manuellement. Si vous voulez lister toutes les branches distantes :
git branch -a
Pour mettre à jour les branches locales qui suivent les branches distantes :
git pull --all
Cependant, cela peut être encore insuffisant. Cela 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 '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
git branch -r | grep -v '\->' | 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 y a des branches distantes sur le serveur qui ne sont pas suivies par vos branches locales.
P.S. AFAIK git fetch --all
et git remote update
sont équivalents.
Kamil Szot's comment, que les gens ont trouvé utile.
J'ai dû utiliser :
for remote in
git branch -r
; do git branch --track ${remote#origin/} $remote ; doneparce que votre code créait des branches locales nommées
origin/branchname
et j'obtenais "refname 'origin/branchname' ; is ambiguous whenever I j'y faisais référence.
$ git remote update
$ git pull --all
Cela suppose que toutes les branches sont suivies.
Si ce n’est pas le cas, vous pouvez lancer cette commande dans Bash :
for remote in `git branch -r `; do git branch --track $remote; done
Puis lancez la commande.