Zdalna gałąź nie pojawia się w „git branch -r”

139

Pchałem do zdalnego repozytorium Bitbucket, a ostatnio mój kolega przesłał nową gałąź, którą utworzył, do tego samego repozytorium.

Próbuję pobrać przesłane przez niego zmiany.

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

$ git branch -r pochodzenie / wzorzec

W interfejsie użytkownika sieci Bitbucket widzę utworzoną przez niego gałąź. W jaki sposób mogę to zrobić?

Następna próba:

$ git fetch bitbucket
Password for 'https://[email protected]':
From https://bitbucket.org/user/repo
 * branch            HEAD       -> FETCH_HEAD

Jeśli utworzona przez niego gałąź nazywa się new_branch_b, czy powinienem spodziewać się następującego komunikatu?

$ git branch -r
origin/master
origin/new_branch_b

Trzecia próba:

$ 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

Czwarta próba:

[remote "bitbucket"]
url = https://[email protected]/user/repo.git

Zadzwoniłem bitbucketraczej do pilota niż pochodzenia (przynajmniej to pamiętam; ustawiłem to jakiś czas temu)

Piąta próba:

Zaktualizowałem zdalną konfigurację Bitbucket zgodnie z odpowiedzią kan :

$ git config -e

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

Dla większości ludzi będzie to nazywane pochodzenie:

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

Potem,

$ 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

.... i tak dalej.

Myślę, git fetch originże też by działał dla git remote update.

strachgal
źródło
1
Fajnie, ale może refs/remotes/bitbucket/*zamiast tego miało większy sens refs/remotes/origin/*.
kan
Dzięki, odnotowano spójność nazewnictwa. Prawdopodobnie bardziej sensowna byłaby zmiana bitbucketa na pochodzenie! Konwencja i to wszystko :)
strachgal
1
git fetch originspełnia swoje zadanie
Dish

Odpowiedzi:

107

remoteSekcja określa również zasady pobierania. Możesz dodać do niego coś takiego, aby pobrać wszystkie gałęzie z pilota:

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

(Lub wymienić originz bitbucket).

Przeczytaj o tym tutaj: 10.5 Git Internals - The Refspec

kan
źródło
3
To rozwiązało mój ciągły problem z rozgałęzianiem w Git, który miałem od tygodni. Nagle wszystkie rzeczy związane ze zdalną aktualizacją gita zaczęły działać. Dzięki!
PålOliver
2
Z jakiegoś powodu wyglądało to tak: fetch = +refs/heads/master:refs/remotes/origin/masterdla mnie. Wymiana masterz *ustalonym mojego problemu.
Sebastian Blask
2
Jest to bardzo przydatne, jeśli przekonwertowałeś płytkiego klona na nie płytkiego.
Warpzit,
@kan Czy wiesz, dlaczego czasami tak się dzieje? Po prostu mi się to przydarza, kiedy git cloneprojekt. Nie przypominam sobie, bym zrobił coś specjalnego z moim lokalnym dupkiem.
dotnetCarpenter
@dotnetCarpenter Nie jestem pewien ... nigdy nie zdarzyło mi się niespodziewanie. Czy to możliwe, że clonezostało przerwane, a następnie wznowione? Czy coś innego jednocześnie uzyskało dostęp do repozytorium?
kan
218

Zaktualizuj pilota, jeśli nadal tego nie zrobiłeś:

$ git remote update
$ git branch -r
Bruno
źródło
1
Używam klienta GitHub na Win i czasami nie aktualizuje on zdalnych gałęzi. Pierwsza linijka „git remote update” działa jak urok. Łatwe i czyste
Stefano Buora
po tym, git remote updatejak mogę zobaczyć nową gałąź w interfejsie użytkownika. Dzięki
Tinkaal Gogoi
To nie pomogło.
dKab
Wydaje mi się, że udało mi się pobrać gałąź, ale po prostu musiałem ją wyświetlić na liście git branch -r. Na git-scm.com/docs/git-branch jest napisane „Opcja -r powoduje wyświetlenie gałęzi zdalnego śledzenia, a opcja -a pokazuje zarówno gałęzie lokalne, jak i zdalne”. git remote updatepobiera wszystkie gałęzie wszystkich pilotów wymienionych w git remote -v.
Rock Lee
Po uruchomieniu tego mogłem biec, git checkout origin/mastera następnie rozgałęziłem się z odłączonej głowy do mojej głównej gałęzigit branch master; git checkout master
Dfranc3373
35

Jeśli sklonujesz z --depthparametrem, ustawia.git/config nie pobieranie wszystkich gałęzi, ale tylko master.

Możesz po prostu pominąć parametr lub zaktualizować plik konfiguracyjny z

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

do

fetch = +refs/heads/*:refs/remotes/origin/*
DonPaulie
źródło
1
Dzięki! Twoja odpowiedź faktycznie łatwo rozwiązuje problem i wydaje się, że jest to właściwy sposób. Ale powinieneś dodać, że plik konfiguracyjny jest w .git/config, aby ludzie mogli go znaleźć.
dotnetCarpenter
19

Miałem ten sam problem. Wydaje się, że najłatwiejszym rozwiązaniem jest po prostu usunięcie pilota, ponowne jego odczytanie i pobranie.

Jessicah
źródło
1
Spędzałem tak dużo czasu, aby znaleźć tę odpowiedź. To działało bez problemu. Dzięki. :)
kisanme
1
U mnie też
zadziałało
1
git remote -vpokaże Ci Twoje piloty, abyś mógł uzyskać adres URL, git remote rm originusunie go, git remote add origin <url>doda ponownie.
Siddhartha,
To zadziałało dla mnie. Miałem podmoduł git, który jakoś nie pobrał żadnej zdalnej gałęzi niż master. Usunięcie i ponowne dodanie go rozwiązało.
Zamrony P. Juhara
pracował dla mnie, ale teraz dostaję ostrzeżeniewarning: ignoring broken ref refs/remotes/origin/HEAD
dafnahaktana
7

Niestety, git branch -ai git branch -rczy nie pokazać wszystkie zdalnych oddziałów, jeśli nie wykonywane jest „git fetch”.

git remote show origindziała konsekwentnie przez cały czas. git show-refPokazuje również wszystkie odwołania w repozytorium Git. Jednak działa tak jak git branchpolecenie.

Thushan
źródło