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://[email protected]':
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://[email protected]':
From https://bitbucket.org/user/repo
 * branch            HEAD       -> FETCH_HEAD

$ git branch -r
  origin/master

Quatrième essai:

[remote "bitbucket"]
url = https://[email protected]/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://[email protected]/user/repo.git
    fetch = +refs/heads/*:refs/remotes/bitbucket/*

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

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

Ensuite,

$ git remote update

Fetching bitbucket
Password for 'https://[email protected]':
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.

peurgal
la source
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

Kan
la source
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
Bruno
la source
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/*
DonPaulie
la source
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.

Jessica
la source
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.

Thushan
la source