La branche distante n'apparaît pas dans «git branch -r»


140

J'ai poussé vers un référentiel Bitbucket distant et récemment un collègue a poussé une nouvelle branche qu'il a créée dans le même référentiel.

J'essaye de récupérer les modifications qu'il a téléchargées.

 $ git branch -a
 * master
 localbranch1
 localbranch2
 remotes/origin/master

$ git branch -r origine / maître

Dans l'interface utilisateur Web de Bitbucket, je peux voir la branche qu'il a créée. Comment puis-je faire ceci?

Prochain essai:

$ git fetch bitbucket
Password for 'https://xxxxx@bitbucket.org':
From https://bitbucket.org/user/repo
 * branch            HEAD       -> FETCH_HEAD

Si la branche qu'il a créée s'appelle new_branch_b, dois-je m'attendre à voir ce qui suit?

$ git branch -r
origin/master
origin/new_branch_b

Troisième essai:

$ git remote update
Fetching bitbucket
Password for 'https://xxxxx@bitbucket.org':
From https://bitbucket.org/user/repo
 * branch            HEAD       -> FETCH_HEAD

$ git branch -r
  origin/master

Quatrième essai:

[remote "bitbucket"]
url = https://user@bitbucket.org/user/repo.git

J'ai appelé la télécommande bitbucketplutôt que l'origine (du moins c'est ce dont je me souviens; je l'ai configurée il y a un moment)

Cinquième essai:

J'ai mis à jour la configuration à distance de Bitbucket selon la réponse de kan :

$ git config -e

[remote "bitbucket"]
    url = https://user@bitbucket.org/user/repo.git
    fetch = +refs/heads/*:refs/remotes/bitbucket/*

Pour la plupart des gens, cela s'appellera origine:

[remote "origin"]
    url = https://user@bitbucket.org/user/repo.git
    fetch = +refs/heads/*:refs/remotes/origin/*

Ensuite,

$ git remote update

Fetching bitbucket
Password for 'https://user@bitbucket.org':
remote: Counting objects: 48, done.
remote: Compressing objects: 100% (32/32), done.
remote: Total 35 (delta 21), reused 0 (delta 0)
Unpacking objects: 100% (35/35), done.
From https://bitbucket.org/user/repo
 * [new branch]      branch_name1 -> origin/branch_name1
 * [new branch]      branch_name2    -> origin/branch_name2

.... etc.

Je pense que git fetch origincela fonctionnerait aussi pour git remote update.


1
Cool, mais peut-être qu'il avait plus de sens à utiliser refs/remotes/bitbucket/*au lieu de refs/remotes/origin/*.
kan

Merci, dûment noté sur la cohérence de la dénomination. Il est probablement plus logique de changer Bitbucket en origine! Convention et tout ça :)
Feargal

1
git fetch originfait le travail
Dish

Réponses:


108

La remotesection spécifie également les règles de récupération. Vous pouvez y ajouter quelque chose comme ça pour récupérer toutes les branches de la télécommande:

fetch = +refs/heads/*:refs/remotes/origin/*

(Ou remplacez-le originpar bitbucket.)

Veuillez lire à ce sujet ici: 10.5 Git Internals - The Refspec


3
Cela a résolu mon problème de branchement en cours dans Git que j'avais pendant des semaines. Soudain, tout le matériel de mise à jour à distance de git a commencé à fonctionner. Merci!
PålOliver

2
Pour une raison quelconque, cela ressemblait à: fetch = +refs/heads/master:refs/remotes/origin/masterpour moi. Le remplacement masterpar a *corrigé mon problème.
Sebastian Blask

2
Ceci est très utile si vous avez converti un clone peu profond en un clone peu profond.
Warpzit

@kan Savez-vous pourquoi cela arrive parfois? Cela m'arrive juste lors d' git cloneun projet. Je ne me souviens pas avoir fait quelque chose de spécial avec mon git local.
dotnetCarpenter

@dotnetCarpenter Je ne sais pas ... ne m'est jamais arrivé de façon inattendue. Est-il possible que cela ait cloneété interrompu puis repris? Ou quelque chose d'autre a accédé au repo simultanément?
kan

218

Mettez à jour votre télécommande si vous ne l'avez toujours pas fait:

$ git remote update
$ git branch -r

1
J'utilise le client GitHub sur Win et parfois il ne met pas à jour les branches distantes. La première ligne "git remote update" fonctionne comme un charme. Easy & clean
Stefano Buora

après que git remote updateje puisse voir la nouvelle branche dans l'interface utilisateur. Merci
Tinkaal Gogoi

Cela n'a pas aidé.
dKab

Je pense que j'avais déjà réussi à récupérer la branche, mais j'avais juste besoin de la voir répertoriée avec git branch -r. Sur git-scm.com/docs/git-branch, il est dit "L'option -r fait que les branches de suivi à distance sont répertoriées, et l'option -a montre les branches locales et distantes". git remote updaterécupère toutes les branches de toutes les télécommandes répertoriées dans git remote -v.
Rock Lee

Après avoir exécuté cela, j'ai pu courir git checkout origin/master, puis j'ai bifurqué de cette tête détachée vers ma branche principalegit branch master; git checkout master
Dfranc3373

35

Si vous clonez avec le --depthparamètre, il .git/configne récupère pas toutes les branches, mais uniquement master.

Vous pouvez simplement omettre le paramètre ou mettre à jour le fichier de configuration à partir de

fetch = +refs/heads/master:refs/remotes/origin/master

à

fetch = +refs/heads/*:refs/remotes/origin/*

1
Merci! Votre réponse résout le problème facilement et semble être la bonne façon de le faire. Mais vous devez ajouter que le fichier de configuration est dans .git/config, afin que les gens puissent le trouver.
dotnetCarpenter

19

J'ai eu le même problème. Il semble que la solution la plus simple consiste simplement à supprimer la télécommande, à la lire et à la récupérer.


1
Passait tellement de temps à trouver cette réponse. Cela a fonctionné sans aucun problème. Merci. :)
kisanme

1
Cela a fonctionné pour moi aussi, assez étrange que cela ait résolu le problème
CailinP

1
git remote -vvous montrera vos télécommandes afin que vous puissiez obtenir l'URL, la git remote rm originsupprimera,git remote add origin <url> rajoutera.
Siddhartha le

Cela a fonctionné pour moi. J'avais un sous-module git qui, d'une manière ou d'une autre, ne récupérait aucune branche distante que master. Le supprimer et l'ajouter à nouveau l'a résolu.
Zamrony P. Juhara

a travaillé pour moi, mais maintenant je reçois un avertissementwarning: ignoring broken ref refs/remotes/origin/HEAD
dafnahaktana

7

Malheureusement, git branch -aet git branch -rne pas vous montrer toutes les branches à distance, si vous ne l' avez pas exécuté un « git fetch ».

git remote show originfonctionne constamment tout le temps. Affiche également git show-reftoutes les références dans le référentiel Git. Cependant, cela fonctionne comme la git branchcommande.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.