Przypadkowo trafiłem w to dzisiaj, próbując uruchomić Git garbage collect :
$ git gc
fatal: bad object refs/remotes/origin/HEAD
error: failed to run repack
Jak sobie z tym radzę?
git
git-remote
git-fetch
git-gc
Ryan
źródło
źródło
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.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 mnieProblem, 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:I dokładnie edytowane go do punktu, w moim nowym domyślnym gałęzi i wszystko było dobrze:
Wskazówka, która dała mi wskazówkę, była taka, że uruchomienie
git prune
pokazało ten błąd:źródło
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:
Automatycznie ustawił plik na nową gałąź i
git gc
po tym działał dobrze.źródło
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.
źródło
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
To powinno to naprawić.
źródło
Jeśli używasz drzew roboczych git, upewnij się, że wykonujesz plik
przed uruchomieniem
Doszło do zepsucia drzewa roboczego i po usunięciu uszkodzonego drzewa roboczego wydawało się, że to wystarczy.
git prune
samo w sobie nie wydawało się działać.źródło
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.
źródło