Git: Impossible de voir la nouvelle branche distante

116

Un collègue a poussé une nouvelle branche distante vers origin / dev / homepage et je ne peux pas la voir lorsque je lance:

$ git branch -r

Je vois toujours des branches distantes préexistantes.

Je suppose que c'est parce que mes références distantes locales ne sont pas à jour.Par conséquent, lorsque j'ai exécuté un git pull, rien ne s'est passé puisque git pull ne tire que sur la branche de travail actuelle, correctement? Contrairement à git push qui pousse toutes les branches qui ont des modifications dans la branche distante correspondante?

hybride9
la source
Un problème connexe - Impossible de voir la branche distante
RBT
1
réussi à oublier git pull, merci
JelenaČuklina
1
Dans mon cas, a git fetch <name-of-remote>fait l'affaire. Sans le nom de la télécommande, cela n'a PAS fonctionné.
Menno Deij - van Rijswijk

Réponses:

164

Tout d'abord, vérifiez que la branche a bien été poussée à distance, en utilisant la commande git ls-remote origin. Si la nouvelle branche apparaît dans la sortie, essayez de donner la commande git fetch: elle devrait télécharger les références de branche depuis le référentiel distant.

Si votre branche distante n'apparaît toujours pas, vérifiez (dans la ls-remotesortie) quel est le nom de la branche sur la télécommande et, plus précisément, si elle commence par refs/heads/. En effet, par défaut, la valeur de remote.<name>.fetchest:

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

de sorte que seules les références distantes dont le nom commence par refs/heads/seront mappées localement comme références de suivi à distance sous refs/remotes/origin/(c'est-à-dire qu'elles deviendront des branches de suivi à distance)

Marco Leogrande
la source
4
J'ai pu voir la nouvelle branche distante après avoir fait un git fetch origin, mais je ne sais pas quelle est la différence si je viens de faire un git fetch? J'ai lu à propos de la mise à jour à distance git, mais je ne savais pas ce que cela aurait fait. Aurais-je besoin d'exécuter git fetch pour toutes les nouvelles branches distantes à partir de maintenant?
hybride9
1
@ hybrid9 Si vous utilisez git fetch, git téléchargera les références depuis le référentiel distant par défaut qui a été spécifié dans .git/config: généralement, il sera appelé origin, donc les deux commandes sont équivalentes, mais votre configuration spécifique peut être différente pour une raison quelconque. Non, vous n'avez pas besoin de donner git fetchpour chaque branche, car (par défaut) il récupère toutes les branches.
Marco Leogrande
1
@ hybrid9 git pulléquivaut à git fetch+ git merge(ou git rebasesi vous avez changé les valeurs par défaut), vous pouvez donc continuer à utiliser git pullcomme d'habitude, et les nouvelles branches distantes apparaîtront d'elles-mêmes.
Marco Leogrande
1
À l'origine, j'ai exécuté git pull mais je n'ai jamais vu cette nouvelle branche distante qui m'a vraiment dérouté. Seulement jusqu'à ce que je lance git fetch origin. J'apprécie le temps passé pour répondre à mes questions.
hybrid9
2
@hybrid J'ai le même problème. git ls-remote gerritrepo:projectmontre la nouvelle branche distante mais git branch -ane le fait pas ... Je dois faire un autre clone et alors seulement la nouvelle branche apparaîtra
Vikram
79

Vérifiez si .git/configcontient

[remote "origin"]
    url = …
    fetch = +refs/heads/master:refs/remotes/origin/master

Si oui, changez-le pour dire

[remote "origin"]
    url = …
    fetch = +refs/heads/*:refs/remotes/origin/*

Ensuite, vous devriez pouvoir l'utiliser:

$ git fetch
remote: Counting objects: …
remote: Compressing objects: ..
Unpacking objects: …
remote: …
From …
 * [new branch]            branchname -> origin/branchname
$ git checkout branchname
Branch branchname set up to track remote branch branchname from origin.
Switched to a new branch 'branchname'
Jesse Glick
la source
12
Cela m'est arrivé après un premier clone peu profond.
ArkTekniK
Parfait!!! Merci beaucoup! Cela m'est arrivé lors de l'installation d'un robinet Homebrew personnalisé avec la commande brew tap user/repo: la copie locale du repo clonée par brewavait les paramètres que vous avez mentionnés et il n'était pas possible de voir et d'utiliser les autres branches que j'avais dans mon repo. Merci encore! :) +1!
rmbianchi
3
La commande suivante peut être utilisée à la place de l'édition manuelle du fichier .git / config . git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"puis git fetch originpour obtenir toutes les branches d' origine .
dotnetCarpenter le
c'est une belle!
madz
47

La réponse la plus simple est:

git fetch origin <branch_name>

Jacek Dziurdzikowski
la source
2
C'était littéralement la SEULE chose qui fonctionnait pour moi.
Theodore R. Smith
3
Ça ne marche pas pour moi. fatal: Couldn't find remote ref <branch_name>
J'obtiens
3
oui, cela a fonctionné pour moi aussi, après cette vérification git a bien fonctionné !!
whoami
30

Faire une mise à jour git remote mettra également à jour la liste des branches disponibles depuis le référentiel distant.

Si vous utilisez TortoiseGit, à partir de la version 1.8.3.0, vous pouvez faire "Git -> Sync" et il y aura un bouton "Remote Update" en bas à gauche de la fenêtre qui apparaîtra. Cliquez dessus. Ensuite, vous devriez pouvoir faire "Git -> Switch / Checkout" et faire apparaître la nouvelle branche distante dans la liste déroulante des branches que vous pouvez sélectionner.

métaforge
la source
18
git remote updateest une ancienne façon de faire cela, la nouvelle commande préférée est git fetch.
Dans ma version de TortoiseGit (2.8.0.0), le bouton en bas à gauche a plusieurs options sous la flèche, et il se souvient de ce que vous avez sélectionné précédemment. Cela signifie que le bouton peut ne pas dire "Mise à jour à distance". Si vous ne l'avez pas encore utilisé, il indiquera "Pull". Cliquez donc sur la flèche et vous verrez "Mise à jour à distance" dans la liste des options.
Michael Hinds
14

Disons que nous recherchons la version / 1.0.5

Quand git fetch -allest ne fonctionne pas et que vous ne pouvez pas voir la branche à distance et git branch -rne pas montrer cette branche spécifique.

1. Imprimez toutes les références depuis la télécommande (branches, tags, ...):

git ls-remote origin Devrait vous montrer la branche distante que vous recherchez.

e51c80fc0e03abeb2379327d85ceca3ca7bc3ee5        refs/heads/fix/PROJECT-352
179b545ac9dab49f85cecb5aca0d85cec8fb152d        refs/heads/fix/PROJECT-5
e850a29846ee1ecc9561f7717205c5f2d78a992b        refs/heads/master
ab4539faa42777bf98fb8785cec654f46f858d2a        refs/heads/release/1.0.5
dee135fb65685cec287c99b9d195d92441a60c2d        refs/heads/release/1.0.4
36e385cec9b639560d1d8b093034ed16a402c855        refs/heads/release/1.0
d80c1a52012985cec2f191a660341d8b7dd91deb        refs/tags/v1.0

La nouvelle branche «release / 1.0.5» apparaît dans la sortie.

2. Forcer la récupération d'une branche distante:

git fetch origin <name_branch>:<name_branch>

$ git fetch origin release/1.0.5:release/1.0.5

remote: Enumerating objects: 385, done.
remote: Counting objects: 100% (313/313), done.
remote: Compressing objects: 100% (160/160), done.

Receiving objects: 100% (231/231), 21.02 KiB | 1.05 MiB/s, done.
Resolving deltas: 100% (98/98), completed with 42 local objects.
From http://git.repo:8080/projects/projectX
 * [new branch]        release/1.0.5 -> release/1.0.5

Maintenant, vous avez également les références localement, vous vérifiez (ou quoi que ce soit) cette branche.

Travail accompli!

jpmottin
la source
1
Vous êtes un sauveur de vie :)
Chakri
Le n ° 2 était ce que je cherchais. Merci!
Matthieu
4

Cela semble trivial, mais mon problème était que je n'étais pas dans le bon projet. Assurez-vous que vous êtes dans le projet auquel vous vous attendez; sinon, vous ne pourrez pas abaisser les bonnes branches.

NoirChapeauSamouraï
la source
Oops! Bon!
Marc
2

J'ai utilisé la force brute et supprimé la télécommande, puis je l'ai ajoutée

git remote rm <remote>
git remote add <url or ssh>
Canard en caoutchouc
la source
1

Ce qui a finalement fonctionné pour moi a été d'ajouter le nom du référentiel distant à la git fetchcommande, comme ceci:

git fetch core

Vous pouvez maintenant les voir tous comme ceci:

git branch --all
Serj Sagan
la source
0

Vous pouvez vérifier la branche distante / n git fetch && git checkout remotebranch

thao vu
la source