fetch w git nie ma wszystkich gałęzi

201

Sklonowałem repozytorium, po którym ktoś utworzył nowy oddział, nad którym chciałbym zacząć pracować. Przeczytałem instrukcję i wydaje się, że jest to całkiem proste. O dziwo, to nie działa, a wszystkie posty, które znalazłem, sugerują, że robię dobrze. Poddaję się więc baranowaniu, ponieważ z tym musi być oczywiście coś nie tak:

Wydaje się, że właściwe jest działanie

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

W tym momencie jest problem, z jakiegoś powodu po tym, git fetchjak nie widzę zdalnej gałęzi dev-gml. Dlaczego nie? Jeśli świeżo sklonuję repozytorium, to już tam jest, więc na pewno istnieje gałąź zdalna:

$ 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

Próbowałem git update, git pull, git fetch --all, git pretty-pleasewe wszystkich możliwych permutacji ...

Edward Newell
źródło
44
Co git config --get remote.origin.fetchprodukuje? Jeśli nie +refs/heads/*:refs/remotes/origin/*, prawdopodobnie tak powinno być.
trek
tak właśnie to produkuje
Edward Newell,
3
Dokładnie ten sam problem, ale powyższy komentarz go rozwiązał! miałem+refs/heads/master:refs/remotes/origin/master ze masterzamiast*
Mirko
1
Dla mnie ten sam problem, ale żadna z sugestii na tej stronie go nie rozwiązuje. Dziwne.
Magnus
1
@ thoni56: Tak, jest to prawdopodobnie spowodowane płytkim klonem.
Trần Việt Hoàng

Odpowiedzi:

383

Problem można zobaczyć podczas sprawdzania remote.origin.fetchustawienia
(wiersze rozpoczynające się od $są poleceniami bash z wpisanymi poleceniami. Pozostałe wiersze to wynikowy wynik)

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

Jak widać, w moim przypadku pilot został ustawiony tak, aby specyficznie i tylko pobierał gałąź master. Naprawiłem to zgodnie z poniższym opisem, w tym drugie polecenie sprawdzania wyników.

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

Symbol wieloznaczny *oczywiście oznacza wszystko pod tą ścieżką.

Niestety widziałem ten komentarz po tym, jak już go przekopałem i znalazłem odpowiedź metodą prób i błędów.

AndASM
źródło
2
To prawdopodobnie powinna być zaakceptowana odpowiedź, ponieważ faktycznie rozwiązała problem w pierwotnym poście.
LocalPCGuy
1
tylko na marginesie, musiałem dodać --replace-allparametr, aby zastąpić wszystkie wartości w konfiguracji dla mojegoremote.origin.fetch
Garis M Suero
4
Pamiętaj, że może się to zdarzyć, jeśli git clone <url> --branch <branch> --single-branch [<folder>]
sklonujesz
2
Sprawdź odpowiedź
Stuxa
5
Może się to zdarzyć, gdy sklonujesz zgit clone ... --depth 1
Anatolii Bivol
107

Miałem dzisiaj ten problem na repozytorium.

To nie było +refs/heads/*:refs/remotes/origin/* problem jak na najlepsze rozwiązanie.

Objawem było po prostu to git fetch originlubgit fetch po prostu nie wydają się nic zrobić, chociaż były odległe oddziały do pobrania.

Po wypróbowaniu wielu rzeczy usunąłem pilot źródłowy i odtworzyłem go. Wydaje się, że to naprawiło. Nie wiem dlaczego.

usuń za pomocą: git remote rm origin

i odtwórz z: git remote add origin <git uri>

stux
źródło
14
Miałem poprawną konfigurację git dla remote.origin.fetchnp +refs/heads/*:refs/remotes/origin/*. Powyższe rozwiązanie pomogło mi.
Newbee
9
To rozwiązanie również było dla mnie właściwe. Jest to niefortunne, ponieważ wskazuje na potencjalnie błąd w Git.
Robert Oschler,
2
To także rozwiązało mój problem. Wydaje mi się, że mam ten problem na komputerze z wersją git 2.19.1v, ale nie spotkałem go na innym komputerze z wersją git 2.17.1
jerpint
6
git remote update originpracował dla mnie. Chyba coś wymagało odświeżenia?
Felipe Gerard
2
git remote update originnie działało dla mnie, ale działało usunięcie i dodanie pilota.
Anatoliy Kmetyuk
58

Zdalna aktualizacja

Musisz biec

git remote update

lub

git remote update <remote> 

Następnie możesz uruchomić, git branch -raby wyświetlić listę zdalnych gałęzi.

Kasa nowego oddziału

Aby śledzić (nową) gałąź zdalną jako gałąź lokalną:

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

lub (czasami nie działa bez dodatkowych remotes/):

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

Pomocne ściągawki

philipvr
źródło
5
Ale moim problemem jest to, że nie mogę wyewidencjonować istniejącej zdalnej gałęzi, ponieważ mój klient git nie myśli, że istnieje. Zobacz moje pytanie. Zauważ, że kiedy uruchamiam, git fetchnastępuje git branch -ato nie pokazuje wszystkich gałęzi. Musiałem usunąć katalog roboczy i ponownie sklonować, aby zobaczyć gałąź dev-gmlutworzoną przez współpracownika. Tym razem zadziałało, ale będziemy się często rozgałęziać!
Edward Newell
Hej @EdwardNewell, dziękuję za odpowiedź, aby Cię powiadomić, twój link cheat.errtheblog.com/s/git jest dla mnie martwy ...
Kjellski
Minęło dużo czasu, odkąd po raz pierwszy zadałem to pytanie i właśnie dostałem ping, ponieważ ktoś napisał na nowo. Przyjmuję tę odpowiedź, chociaż pierwotnie nic tak naprawdę dla mnie nie działało. Powodem, dla którego ostatecznie oznaczyłem to jako prawidłowe, jest to, że podejrzewam, że to, co napisał, Edit:bardzo dobrze, mogło zadziałać. Właśnie tego bym spróbował, gdybym nadal miał problem. HTH
Edward Newell
Dla przypomnienia, kawałek, który mi tutaj pomógł, to git remote update origin. Dzięki temu brakująca gałąź była widoczna przez git branch -l -r. (Spojrzałem na git config --get remote.origin.fetchi wynik był+refs/heads/*:refs/remotes/origin/*
zgodny z
9

napisz to z terminala

git fetch --prune.

to działa dobrze.

Samet ÖZTOPRAK
źródło
1
Dziękuję Ci! Próbowałem wielu rzeczy i pomyślałem, że dam temu szansę ... Teraz, aby sprawdzić, co faktycznie zrobiłem ...
MadTurki
Co to robi?
Adam Orłow
Zajmuje wszystkie dostępne oddziały. Spójrz na głowę.
Samet ÖZTOPRAK
4

Aby uczynić go bardziej szczegółowym Utwórz gałąź śledzenia, co oznacza, że ​​śledzisz teraz gałąź zdalną.

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

Po czym możesz

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

Następnie pracuj nad tym oddziałem

git checkout branchname
git checkout exp

Po wprowadzeniu zmian w oddziale. Możesz pobierać i scalać za pomocą gałęzi zdalnego śledzenia, aby scalić zmiany i przekazać je do zdalnej gałęzi, jak poniżej.

git fetch origin
git merge origin/experimental  
git push origin/experimental

Mam nadzieję, że to pomaga i daje wyobrażenie o tym, jak to działa.

Swapna
źródło
1

Miałem podobny problem, jednak w moim przypadku mogłem przyciągnąć / wcisnąć do zdalnego oddziału, ale git statusnie pokazałem stanu oddziału lokalnego względem zdalnych.

Również w moim przypadku git config --get remote.origin.fetchnic nie zwróciło

Problem polega na tym, że w literaturze było literówka .git/config w wierszu pobierania odpowiedniego zdalnego bloku . Prawdopodobnie coś, co wcześniej przez pomyłkę dodałem (czasami patrzę bezpośrednio na ten plik, a nawet go edytuję)

Sprawdź więc, czy Twój zdalny wpis w .git/configpliku jest poprawny, np .:

[remote "origin"]
    url = https://[server]/[user or organization]/[repo].git
    fetch = +refs/heads/*:refs/remotes/origin/*
Juh_
źródło
0

Przyczyną może być moment twarzy: jeśli przełączysz się między kilkoma klonami, łatwo znajdziesz się w niewłaściwym drzewie źródłowym, próbując wyciągnąć nieistniejącą gałąź. Łatwiej jest, gdy klony mają podobne nazwy lub repo to odrębne klony dla tego samego projektu od każdego z wielu współautorów. Wydaje się, że nowy klon git rozwiązałby ten „problem”, gdy prawdziwym problemem jest utrata koncentracji lub kontekst pracy lub jedno i drugie.

jerseyboy
źródło
0

Musiałem przejść do moich zdalnych repozytoriów GitExtensions, ponieważ nic tutaj nie działało. Tam zobaczyłem, że 2 oddziały nie mają skonfigurowanego zdalnego repozytorium. po dostosowaniu wygląda następującowprowadź opis zdjęcia tutaj

Oddział powiadomień noExternal3nadal pokazuje, że nie ma zdalnego repozytorium. Nie jestem pewien, jakie kombinacje poleceń bash mogłyby to znaleźć lub dostosować.

Masłów
źródło
0

Miałem ten sam problem podczas konfigurowania mojego repozytorium od zera. Próbowałem wszystkiego, nic nie działało oprócz usunięcia źródła i ponownego dodania go ponownie.

git remote rm origin
git remote add origin [email protected]:web3coach/the-blockchain-bar-newsletter-edition.git

git fetch --all
// Ta daaa all branches fetched
Lukas Lukac
źródło
-1

Mieliśmy ten sam problem i musisz go użyć

git fetch

git push origin branch_name

git branch -r

Mam nadzieję, że pomoże to komuś, kto zmaga się z tym samym problemem

chazefate
źródło