web-dev-qa-db-fra.com

git fetch ne va pas chercher toutes les branches

J'ai cloné un référentiel, après quoi quelqu'un d'autre a créé une nouvelle branche, sur laquelle j'aimerais commencer à travailler. J'ai lu le manuel et il semble tout à fait simple. Étrangement, cela ne fonctionne pas, et tous les messages que j'ai trouvés suggèrent que je fais la bonne chose. Donc, je vais me soumettre à la fête, parce qu'il y a doit il y a quelque chose qui ne va pas avec ça:

L'action correcte semble être

git fetch
git branch -a
* master
  remotes/Origin/HEAD --> Origin/master
  remotes/Origin/master
git checkout -b dev-gml Origin/dev-gml

À ce stade, il y a un problème, pour une raison quelconque après git fetch, je ne peux pas voir la branche distante dev-gml. Pourquoi pas? Si je clone le référentiel récemment, il est là, donc la branche distante existe:

$ mkdir ../gitest
$ cd ../gitest
$ git clone https://github.com/example/proj.git
Cloning into proj...
remote: Counting objects: 1155, done.
remote: Compressing objects: 100% (383/383), done.
remote: Total 1155 (delta 741), reused 1155 (delta 741)
Receiving objects: 100% (1155/1155), 477.22 KiB | 877 KiB/s, done.
Resolving deltas: 100% (741/741), done.
$ cd projdir
$ git branch -a
* master
  remotes/Origin/HEAD -> Origin/master
  remotes/Origin/dev-gml
  remotes/Origin/master

J'ai essayé git update, git pull, git fetch --all, git pretty-please dans toutes les permutations possibles ...

113
Edward Newell

Le problème peut être vu lors de la vérification du réglage remote.Origin.fetch
(Les lignes commençant par $ sont des invites bash avec les commandes que j'ai tapées. Les autres lignes sont la sortie résultante)

$ git config --get remote.Origin.fetch
+refs/heads/master:refs/remotes/Origin/master

Comme vous pouvez le constater, dans mon cas, la télécommande était configurée pour extraire spécifiquement et uniquement la branche principale. Je l'ai corrigé comme ci-dessous, y compris la deuxième commande pour vérifier les résultats.

$ git config remote.Origin.fetch "+refs/heads/*:refs/remotes/Origin/*"
$ git config --get remote.Origin.fetch
+refs/heads/*:refs/remotes/Origin/*

Le caractère générique * signifie bien sûr tout ce qui se trouve sous ce chemin.

Malheureusement, j'ai vu ce commentaire après avoir déjà fouillé et trouvé la réponse par essais et erreurs.

225
AndASM

Pour suivre une (nouvelle) branche distante en tant que branche locale:

git checkout -b <local branch> <remote>/<remote branch>

ou (parfois, cela ne fonctionne pas sans le remotes/ supplémentaire):

git checkout -b <local branch> remotes/<remote>/<remote branch>

Edit: Vous devez exécuter git remote update ou git remote update <remote>. Ensuite, vous pouvez exécuter git branch -r pour répertorier les branches distantes.

Trucs utiles

40
philipvr

J'ai eu ce problème aujourd'hui sur un repo. 

Ce n'était pas le problème +refs/heads/*:refs/remotes/Origin/* selon la solution la plus avancée.

Le symptôme était simplement que git fetch Origin ou git fetch ne semblait rien faire, bien qu'il y ait des branches distantes à récupérer.

Après avoir essayé beaucoup de choses, j'ai retiré la télécommande Origin et l'ai recréée. Cela semble l'avoir corrigé. Je ne sais pas pourquoi.

supprimer avec: git remote rm Origin

et recréez avec: git remote add Origin <git uri>

27
stux

Pour plus de précision, créez une branche de suivi, ce qui signifie que vous suivez maintenant une branche distante.

git branch --track branch remote-branch
git branch --track exp remotes/Origin/experimental

Après quoi vous pouvez 

git branch   # to see the remote tracking branch "exp" created .

Puis pour travailler sur cette branche faire 

git checkout branchname
git checkout exp

Après avoir apporté des modifications à la branche. Vous pouvez git fetch et git fusionner avec votre branche de suivi à distance pour fusionner vos modifications et transmettre à la branche distante comme indiqué ci-dessous.

git fetch Origin
git merge Origin/experimental  
git Push Origin/experimental

J'espère que cela vous aidera et vous donnera une idée de la façon dont cela fonctionne.

4
Swapna

l'écrire depuis le terminal 

git fetch --Prune.

ça fonctionne bien.

2
Samet öztoprak

Cela peut être dû à un moment de paume: si vous basculez entre plusieurs clones, il est facile de vous retrouver dans le mauvais arbre source en essayant de tirer une branche non existante. Cela est plus facile lorsque les clones portent des noms similaires ou que les pensions sont des clones distincts pour le même projet provenant de plusieurs contributeurs. Un nouveau clone Git semble évidemment résoudre ce "problème" lorsque le vrai problème est la perte de concentration, le contexte de travail ou les deux. 

0
jerseyboy

Nous avons eu le même problème et vous devez utiliser 

git fetch

git Push Origin branch_name

git branch -r

J'espère que cela aidera quelqu'un confronté au même problème

0
chazefate

Je devais aller dans mes dépôts distants GitExtensions car rien ne semblait fonctionner ici. Là, j'ai vu que 2 branches n'avaient pas de référentiel distant configuré. après ajustement, il se présente comme suitenter image description here

Remarquez que la branche noExternal3 indique toujours qu'il n'existe pas de référentiel distant. Vous ne savez pas quelle combinaison de commandes bash l'aurait trouvée ou ajustée.

0
Maslow