Mój komputer zepsuł się i teraz jedno z moich repozytoriów git jest zepsute. Kiedy próbuję przejść do kasy, mówi mi:
warning: ignoring broken ref refs/heads/master.
error: Your local changes to the following files would be overwritten by checkout:
com.vainolo.jdraw2d.releng.p2/pom.xml
Please, commit your changes or stash them before you can switch branches.
Aborting
Kiedy wykonuję git stash
, otrzymuję:
fatal: bad revision 'HEAD'
fatal: bad revision 'HEAD'
fatal: Needed a single revision
You do not have the initial commit yet
Więc co mogę zrobić?
Aktualizacja danych
wyjściowych git reflog
:
fatal: bad default revision 'HEAD'
Niezbyt obiecujące ... Wynik git fsck
:
error: Invalid HEAD
Checking object directories: 100% (256/256), done.
error: unable to unpack 59551f96b4e87a1c14293c19eb548ce6fa1f196f header
error: inflateEnd: stream consistency error (no message)
fatal: loose object 59551f96b4e87a1c14293c19eb548ce6fa1f196f (stored in .git/objects/59/551f96b4e87a1c14293c19eb548ce6fa1f196f) is corrupt
.git/refs/heads/master
istnieje i czy jego zawartość jest poprawnym hashem commita twojego repozytorium (możesz to sprawdzić np. Używającgit show <hash>
)?.git/refs/heads/master/
jest kilka^@
git reflog
ci powie? Próbowałeś biegaćgit fsck
?Odpowiedzi:
Udało mi się dojść do siebie poprzez:
źródło
rm <root repository path>/.git/modules/<path to the submodule>/refs/remotes/origin/HEAD
rm -rf .git/refs/remotes/origin
, ale wskazałeś mi właściwy kierunekZacznij od wykonania czynności sugerowanych w sekcji Odzyskiwanie uszkodzonego repozytorium git :
.git/refs
nadal zawiera coś przydatnegogit reflog
i nie sprawdzić , czy zawartość.git/logs/refs/heads/master
gałęzi, w której byłeś, była ostatniagit fsck
, potencjalnie z--unreachable
lub--lost-found
Miejmy nadzieję, że pozwoli ci to dowiedzieć się, jaki
master
powinien być ref, abyś mógł go przywrócić (tj. Zakotować poprawny SHA1 do.git/refs/heads/master
).W przypadku, gdy jakikolwiek obiekt zawarty w tym zatwierdzeniu jest rzeczywiście uszkodzony,
HEAD
niestety nie można go przywrócić . Zakładając, że twoje drzewo robocze i / lub indeks są nienaruszone, możesz wypróbowaćgit reset --soft
(lub nie powiedzie się to agit reset
) poprzedniego zatwierdzenia, a następnie ponownie wykonać zatwierdzenie. Unikaj operacji, które zmieniają twoje drzewo robocze sagit checkout -f
lubgit reset --hard
.źródło
.git/logs/refs/heads/mybranch
. Pokazuje jakąś historię zatwierdzeń w tej gałęzi. Przeglądając to, wybrałem SHA i próbowałem je wyświetlićgit show
. (Każde zatwierdzenie ma dwa SHA, wybrałem drugi, tuż przed nazwiskiem autora). Ostatni był uszkodzony, ale poprzedni mógł byćgit show
n, a następnie mogłem go wcisnąćgit push origin abcdef:mybranch
.Miałem podobny problem po niebieskim ekranie śmierci w systemie Windows 8.1
Miałem plik w tej lokalizacji ...
C:\www\<project>\.git\refs\remotes\origin\<problem-branch>
I był pusty, podczas gdy inne pliki gałęzi w tym folderze mają w sobie długie ciągi.
NB nie miałem żadnych zmian / zatwierdzeń
<problem-branch>
plikugit fetch --all
ponownie zdobyć gałąźNastępnie automatyczne uzupełnianie kart ponownie zaczęło działać
źródło
Jeśli nie ma wielu zmodyfikowanych plików, myślę, że wygodnym sposobem rozwiązania tego problemu jest:
git commit -a
źródło
Udało mi się to rozwiązać, usuwając główny plik w katalogu git \ refs \ heads
źródło
Po zamrożeniu komputerowej i katastrofy, mój git oddział został uszkodzony z komunikatem:
git fatal: your current branch appears to be broken
. Nic nie mogłem zrobić.Po wykonaniu
git fsck
tej czynności wspomniałem, że gałąź ma rozszerzenieerror: Invalid HEAD
.refs/heads/<branch>
miałinvalid sha1 pointer
.Po skorzystaniu z opcji tutaj, otworzyłem
.git/refs/heads/<branch>
w edytorze notepad ++ i każdy ze znaków sha1 byłNUL
.Na szczęście potrzebowałem tylko zresetować gałąź do stanu zdalnego, a to było na repozytorium bitbucket. Złapałem sha1 z końcówki zdalnego repozytorium i skopiowałem do
.git/refs/heads/<branch>
zapisanego, a następnie zrobiłemgit reset --hard HEAD
i wszystko wróciło do normy.źródło
Byłem na tyle głupi, że zapomniałem push, a mój komputer się zawiesił podczas wykonywania zatwierdzenia. Mogłem odzyskać wszystko oprócz ostatniego zatwierdzenia, otwierając .git / logs / refs / heads /
Ten plik zawiera wszystkie zatwierdzenia (wraz z ich SHA) do gałęzi, co zrobiłem, aby odzyskać:
git checkout master
git reset --hard
Więc nawet jeśli popełnisz głupi błąd, nie cofnie Cię od razu cały dzień pracy z gitem :)
źródło
Nie mogłem wyewidencjonować mojej gałęzi głównej z powodu błędu nie można zablokować ref. Skończyło się na usunięciu:
.git/refs/remotes/origin/HEAD
.git/refs/remotes/origin/master
i wywołując to polecenie git:
źródło
Wiem, że to za późna odpowiedź, ale otrzymywałem ten błąd, ponieważ nie miałem pliku
origin/head
. Możesz się tego dowiedzieć, biegającgit branch -r
. Jeśli nie widzisz swojegoorigin/head
wskazania na zdalne źródło, możesz to ustawić, uruchamiającgit remote set-head origin {{your branch name}}
.Teraz biegnij
git branch -r
ponownie i powinieneś zobaczyć coś takiego:origin/HEAD -> origin/develop
Mam nadzieję, że pomoże to każdemu, kto napotka ten problem.
źródło
Mój komputer zawiesił się dwa razy, w wyniku czego moje repozytorium git zostało zepsute lokalnie. Nie mogłem wyciągnąć zmian, poprosił o ustawienie zdalnego pochodzenia, ale nie działało w gitKraken.
W wierszu polecenia otrzymywałem ten błąd
Wiedziałem, że moje referencje są zepsute i należy je naprawić. Musiałem zrobić git bash (w SourceTree kliknij „terminal”). Następnie przejdź do folderu referencyjnego, takiego jak ten
będzie tam nazwa pliku
master
, użyj,ls
aby zobaczyć, co jest w katalogu. Następnie po prostu usuń go za pomocą rm masterbam, uszkodzony plik zniknął. Teraz, jeśli wydasz polecenie git branch -a, wypisze to
Następnie wydaj to polecenie, a naprawi ono odniesienia
Podsumowując, jeśli spróbujesz wyciągnąć pilota, powinien wyświetlić pustą nazwę pilota, która została naprawiona.
źródło
Miałem ten sam problem, ale nie miałem szczęścia, nie mogłem rozwiązać problemu. Odsunąłem repozytorium na bok, ponownie sklonowałem to z serwera i próbowałem połączyć je. Oczywiście pokazało wiele plików niezwiązanych z moją gałęzią, ale pomaga wyodrębnić wymagane pliki.
źródło
Sprawdź, czy MSWindows utworzył pliki desktop.ini, które jednocześnie korzystają z git? dla mnie to robi. Po usunięciu ich wszystkich w podfolderach katalogu .git to działa.
źródło
Miałem ten sam problem, gdy Android Studio nagle się wyłączyło (z powodu utraty zasilania komputera).
Rozwiązałem to, kopiując zawartość mojego
C:\Users\myusername\AndroidStudioProjects\MyBrokenApp\.git\refs\heads\master
pliku do mojegoC:\Users\myusername\AndroidStudioProjects\MyBrokenApp\.git\refs\remotes\origin\master
pliku.(Wcześniej włączałem również opcję „Wymuś wypychanie” w Android Studio, ale nie sądzę, aby był to konieczny krok).
Uwaga:
Znalazłem to rozwiązanie, porównując zawartość plików w moim
C:\Users\myusername\AndroidStudioProjects\MyBrokenApp\.git\
katalogu (w tym podkatalogach) z odpowiadającymi im plikami w innym zdrowym projekcie - npC:\Users\myusername\AndroidStudioProjects\MyHealthyApp\.git\
..Możesz mieć inny plik, który jest uszkodzony, ale porównując z innym sprawnym projektem, powinieneś być w stanie szybko wykryć, co jest nie tak.
Jeśli nie masz innego zdrowego projektu, w którym skonfigurowano git, warto utworzyć prosty w taki sam sposób, w jaki utworzyłeś uszkodzony projekt, aby można było zbadać, porównać i naprawić itp.
PS - Mój komunikat o błędzie (edytowany) to:
warning: ignoring broken refs/remotes/origin/master.fatal bad revision 'refs/remotes/origin/master..refs/heads/master' during executing git -c core.quotepath=false log refs/remotes/origin/master..refs/heads/master --pretty=format --encoding=UTF-8 -M --name-status -c --
źródło
Wybacz, żebym powtórzył za kimś (nie przeczytałem wszystkich opinii). Moim zdaniem najprostszym sposobem rozwiązania problemu jest skopiowanie projektu bez .git i .idea, wyczyszczenie go, sklonowanie z gita, usunięcie wszystkiego oprócz powyższych katalogów, a następnie wklejenie poprzedniej kopii do nowo utworzonego repozytorium z .git i .idea . Mam nadzieję, że to ma sens.
źródło