Odpowiedzi:
Nie rozumiem konsekwencji tego, ale jak sugerowano w tym wątku , kiedy to spotkałem, właśnie to zrobiłem
$ mv .git/refs/remotes/origin/HEAD /tmp
(trzymanie go na wszelki wypadek), a potem
$ git gc
pracował bez narzekania; Nie napotkałem żadnych problemów.
git prune
zadziałał dla mnie sposób na usunięcie danych zgromadzonych w Git, ale nie ma do nich żadnych przydatnych odniesień.
$ mv .git/refs/remotes/origin/HEAD /tmp
$ git gc
git prune
git gc
działało dla mnie
Problem, na który natknąłem się (który jest tym samym problemem, o którym @Stavarengo wspomniał w powyższym komentarzu ) polega na tym, że domyślna zdalna gałąź ( develop
w moim przypadku) została usunięta, ale nadal była przywoływana w .git/refs/remotes/origin/HEAD
.
Otwarcie .git/refs/remotes/origin/HEAD
w moim edytorze pokazało to:
ref: refs/remotes/origin/develop
I dokładnie edytowane go do punktu, w moim nowym domyślnym gałęzi i wszystko było dobrze:
ref: refs/remotes/origin/master
Wskazówka, która dała mi wskazówkę, była taka, że uruchomienie git prune
pokazało ten błąd:
> git prune
warning: symbolic ref is dangling: refs/remotes/origin/HEAD
Po zobaczeniu odpowiedzi Trentona spojrzałem na mój .git/refs/remotes/origin/HEAD
i zobaczyłem, że wskazuje on również na starą gałąź, która jest teraz usunięta.
Ale zamiast samodzielnie edytować plik, wypróbowałem rozwiązanie Ryana:
git remote set-head origin --auto
Automatycznie ustawił plik na nową gałąź i git gc
po tym działał dobrze.
git remote set-head $REMOTE --auto
w moim przypadku $ REMOTE jest zdalnym aliasem, a nie domyślnym „źródłem”, ponieważ mam konfigurację wielu pilotów.
Myślałem, że rozwiązanie jest następujące, ponieważ wydawało się, że działa, ale okazuje się, że w rzeczywistości nie rozwiązuje problemu.
git remote set-head origin --auto
git prune
(zgodnie z zaleceniami w wynikach pierwszego polecenia), więc nie jestem w stanie dokładnie powiedzieć, co mi pomogło - pierwsze, drugie lub oba.
git remote set-head origin --auto
naprawiono moje referencje / piloty / pochodzenie / plik HEAD bez konieczności używaniagit prune
error: Multiple remote HEAD branches. Please choose one explicitly
i musiałem użyć git remote set-head origin mybranch
(podczas gdy gałąź „mybranch” była wyrejestrowana), aby błąd zniknął.
Wygląda na to, że twoje symboliczne referencje mogą być zepsute ... Spróbuj zastąpić je domyślną gałęzią w następujący sposób: Na przykład moja domyślna gałąź to master
$ git symbolic-ref refs/remotes/origin/HEAD refs/remotes/origin/master
$ git fetch --prune
$ git gc
To powinno to naprawić.
Przyczyną tego dla mnie była praca w skompresowanym folderze w systemie Windows. Gdy folder został zdekompresowany, spowodował uszkodzenie plików paczek, powodując kaskadowe inne dziwne problemy, takie jak niemożność przycięcia nieistniejących gałęzi.
Jedynym rozwiązaniem było wyczyszczenie katalogu roboczego i ponowne sklonowanie pilota (ów) repozytorium. Na szczęście nadal mogłem naciskać i pobierać aktualizacje, aby nic nie zginęło. Teraz wszystko jest dobrze.
master
na inną o nazwiedevelop
. Kilka dni wcześniej zmieniłem go z powrotem zdevelop
namaster
i usunąłem starą domyślną gałąźdevelop
, ale w moim katalogu roboczym.git/refs/remotes/origin/HEAD
nadal wskazywał plik,refs/remotes/origin/develop
który już nie istnieje. W tej sytuacji usunięcie pliku zadziałało.