Wydaje się, że jest to popularny błąd z różnych przyczyn.
Mam proste repozytorium Git o nazwie „kiflea.git”, sklonowałem je w ten sposób:
git clone git://kipdola.be/kiflea.git
Następnie git mówi mi: warning: remote HEAD refers to nonexistent ref, unable to checkout.
I tak, w mapie nie ma plików wersjonowanych, z wyjątkiem katalogu .git. W każdym razie jedyne, co muszę zrobić, to:
cd kiflea
git checkout master
I działa, wszystkie pliki tam są. Ale pomyślałem, że sklonowanie repozytorium automatycznie sprawdza wzorzec, więc co dokładnie się dzieje i jak to naprawić?
Zauważyłem, że po wykonaniu git checkout master
tej czynności zostaje dodany do mojego lokalnego pliku konfiguracyjnego .git:
[branch "master"]
remote = origin
merge = refs/heads/master
Prawdopodobnie ciekawie jest wiedzieć, że to repozytorium git w odległej przeszłości było repozytorium svn.
Ps: podczas przeglądania czystego repozytorium za pomocą gitweb wyraźnie widać master
tam gałąź: http://kipdola.be/gitweb/?p=kiflea.git;a=summary
git ls-remote origin
ci pokazuje?checkout master
bitem i po nim :25f600739343a7ce32d6311a1e6140870774810b refs/heads/master
HEAD
. Czy masz do niego bezpośredni dostęp? Jeśli tak, zobacz tutajgit clone -b master <url> <dir>
Odpowiedzi:
Te
warning: remote HEAD refers to nonexistent ref, unable to checkout.
środki, które pilot (gołe) repozytorium zawiera odniesienie oddział w pliku o nazwieHEAD
, która nie pasuje do żadnego opublikowanego oddział w tym samym repozytorium.Zauważ, że ostrzeżenie oznacza tylko, że git nie wykonał checkout. Poza tym sklonowane repozytorium jest w porządku. Po prostu zrób,
git branch -a
aby zobaczyć możliwe gałęzie igit checkout the-branch-you-want
obejść problem.Zwykle dzieje się tak, ponieważ domyślna zawartość tego pliku (
.git/HEAD
lub zwykła zawartość dlaHEAD
czystych repozytoriów)ref: refs/heads/master
mówi, że jeśli ktoś idzie doclone
tego repozytorium, powinien domyślnie sklonować gałąźrefs/heads/master
. Domyślnie Git utworzy gałąź lokalną bezrefs/heads/
prefiksu (czylimaster
domyślnie). Spróbujgit help symbolic-ref
uzyskać więcej informacji.Problem z tą sytuacją polega na tym, że Git nie udostępnia metody modyfikowania zdalnych referencji symbolicznych, więc albo używasz czegoś, co zaimplementował dostawca hostingu Git (np. Ustawienia - Domyślna gałąź w GitHubie, jeśli masz uprawnienia administratora), albo musisz użyć nazwy oddziału
master
jako gałąź domyślna (ponieważ jest to domyślna wartość dla tego symbolicznego odniesienia).Jeśli masz dostęp do powłoki zdalnej git repo, można po prostu
cd path/to/bare/git/repo; git symbolic-ref HEAD refs/heads/XYZ
gdzieXYZ
jest nazwą oddziału chcesz używać domyślnie.Jednym ze sposobów rozwiązania tego problemu jest utworzenie nowego zdalnego czystego repozytorium bez zatwierdzeń, a następnie zrobienie tego,
git push name-of-the-remote my-special-branch-name
co spowoduje, że repozytorium będzie zawierało pojedynczą gałąź,my-special-branch-name
aleHEAD
symboliczny odnośnik nadal będzie zawierał domyślną wartość wskazującąmaster
. W rezultacie otrzymasz wspomniane ostrzeżenie.źródło
checkout
. Poza tym sklonowane repozytorium jest w porządku. Zrób,git branch -a
aby zobaczyć możliwe gałęzie igit checkout the-branch-you-want
„naprawić” problem.git clone -b master
(lub jakiejkolwiek nazwy istniejącej gałęzi).cd path/to/bare/git/repo; git symbolic-ref HEAD refs/heads/XYZ
gdzieXYZ
jest domyślną nazwą gałęzi, której chcesz użyć, jeśligit clone
została wykonana bez-b
flagi. Jeśli masz inny problem, zadaj nowe pytanie zamiast dodawać pytania jako komentarze.Miałem ten sam problem, ponieważ nie korzystałem już z
master
oddziału i zgubił się w moim lokalnym i zdalnym repozytorium.Zdalne repozytorium nadal miało
HEAD
ustawione ustawieniemaster
, zmieniłem je na jedną z gałęzi zdalnej, z której faktycznie korzystam i wszystko działa dobrze.Jeśli możesz uzyskać dostęp do zdalnego repozytorium:
remote_repo.git
;HEAD
plikref: refs/heads/master
naref: refs/heads/your_branch
źródło
broken_branch
przezrefs/heads/master
.cd path/to/bare/git/repo; git symbolic-ref HEAD refs/heads/XYZ
gdzieXYZ
jest domyślną nazwą gałęzi, której chcesz użyć, jeśligit clone
zostanie wykonana bez-b
flagi, jak powiedziałem w innym komentarzu.Tak, jest to związane z tym, że twój klon git próbuje pobrać gałąź inną niż master. Po prostu zrób to
Pomoże ci to sklonować dokładną gałąź poprzez jej nazwę.
źródło
Mimo że ten błąd był wyświetlany - mój projekt był nadal podłączony do odpowiedniego repozytorium - uruchomiłem
git branch
polecenie i zobaczyłem odpowiednie gałęzie - potem uruchomiłemgit checkout *branchname
i BOOM - wszystko było w porządku.źródło
Zdecydowanie coś jest nie tak ze zdalnym repozytorium. Możesz to naprawić, tworząc nowy klon repozytorium. Również wypchnięcie nowego zatwierdzenia do gałęzi master może działać.
źródło
Domyślam się, że jest to
*
początek dziennika zatwierdzeń, który w jakiś sposób oszukuje zdalny serwer.Mogę przeglądać interfejs sieciowy repozytorium, używając niektórych linków menu, ale innym nie udaje się z
404 - Unknown commit object
lub podobnym, szczególnie na stronie podsumowania.Sprawdź, czy możesz zmienić ten ostatni komunikat dotyczący zatwierdzenia, a następnie wymuś wypchnięcie aktualizacji, aby sprawdzić, czy to naprawi. W demonie serwera może być błąd. Jeśli to naprawi, warto zgłosić się na liście git [email protected] (tylko zwykłe wiadomości tekstowe)
źródło
Miałem ten sam problem podczas tworzenia samego repozytorium.
Rozwiązałem to po prostu klonując repozytorium, tworząc lokalną gałąź główną, a następnie wypychając master do zdalnego repozytorium.
1) sklonuj repozytorium
2) utwórz lokalną gałąź główną.
3) popełnić coś w lokalnym oddziale
4) Wciśnij lokalny master na pilocie
źródło
Jeśli faktycznie nie ma dostępnej gałęzi głównej, sprawdź następujące kwestie; Jeśli w folderze „.git” znajduje się plik o nazwie „spakowane-refs”, otwórz go i możesz znaleźć wszystkie wymienione odniesienia.
Coś jak poniżej;
Następnie użyj;
Lub
aby pobrać wymaganą wersję. Dziękuję Ci.
źródło
Wydawało się, że naprawiłem to:
Stworzyło to domyślny wzorzec, a następnie mogłem pobrać moje inne gałęzie
źródło
W moim przypadku repozytorium było puste.
źródło
W przypadku Gitlab, nawet jeśli pokazuje, że jesteś na domyślnej gałęzi (np.
master
), Możesz w niej nie być, ustawiając go ponownie, napraw to, na przykład:asd
master
asd
master
asd
oddziałGotowe, teraz twoja domyślna gałąź to
master
źródło