Otwieram moje repozytorium Git za pomocą gitExtensions w systemie Windows 7 dla projektu Visual Studio. Nagle jest pusta. Repozytorium istnieje, ale wszystkie moje zobowiązania zniknęły.
Korzystam z interfejsu graficznego i uważam, że po raz pierwszy go otworzyłem od czasu jego aktualizacji.
Nie jestem pewien, co zrobić, aby odzyskać swoje zobowiązania.
Kiedy piszę
git log
Otrzymałem
fatal: zła wersja domyślna „HEAD”
Aktualizacja
Po przejrzeniu /programming/1545407/recovering-broken-git-repository próbowałem
git fsck
zwrócił:
błąd: nieprawidłowy HEAD
fatal: loose object 36b7d9e1ca496bcb864c0b9c8671fcec97fbda31 (przechowywany w .git / obj ects / 36 / b7d9e1ca496bcb864c0b9c8671fcec97fbda31) jest uszkodzony
Zatwierdzanie zwrotów:
błąd: nie można rozpoznać odwołania HEAD: Brak pliku lub katalogu
krytyczny: nie można zablokować HEAD ref
i rejestrowanie zwrotów gałęzi master
Ostrzeżenie git log master: ignorowanie uszkodzonych referencji / heads / master. ostrzeżenie: ignorowanie zepsutych referencji / heads / master. fatal: dwuznaczny argument „master”: nieznana wersja lub ścieżka nie znajduje się w działającym drzewie. Użyj „-”, aby oddzielić ścieżki od wersji
Po prostu wklejam rzeczy, które mogą być istotne
Ostrzeżenie git reflog master : ignorowanie uszkodzonych referencji / heads / master.
ostrzeżenie: ignorowanie zepsutych referencji / heads / master.
fatal: dwuznaczny argument „master”: nieznana wersja lub ścieżka nie znajduje się w działającym drzewie.
Użyj „-”, aby oddzielić ścieżki od wersji
Bardziej przydatne informacje: za każdym razem, gdy usuwam uszkodzony plik, inny zajmuje jego miejsce. Zaczynam myśleć, że to ma coś wspólnego z gałęzią master wskazującą na niewłaściwą rzecz lub coś. ponieważ zakładam, że głowa wskazuje na mistrza.
Dzień później:
Więc wciągnąłem na to mojego kolegę, był w stanie przejrzeć dzienniki i powiedział, że skróty w dziennikach nie pasują do obiektów w folderze. Próbował zresetować gałąź master do dzienników lub coś w tym rodzaju, trochę się zgubiłem. Mam nadzieję, że to pomocne
Odpowiedzi:
Co dokładnie masz na myśli? Czy działające drzewo wciąż tam jest? Czy
.git/
istnieje Czy są w nim jakieś pliki?Opublikowane wiadomości sugerują, że plik
.git/HEAD
nie istnieje. Określa oczekiwany stan działającego drzewa (to, co sprawdziłeś). Jeśli ten plik zniknie, git nie wie, gdzie byłeś.Możesz spróbować utworzyć plik samodzielnie, korzystając z tej zawartości:
ref: refs/heads/master
Jeśli pracujesz w innej gałęzi, po prostu zamień „master” na nazwę gałęzi. Gdybyś nie był na gałęzi, byłoby to bardziej skomplikowane.
.git/logs/HEAD
rejestruje przeszłe stany HEAD, z późniejszymi wierszami na dole. Ten przykładowy wiersz pokazuje kasę:25f2a6099fb5f9f2192a510c42f704f9fc4bcecb 65abb1a3dc102e2498860f01fb179cda4c51decb Rainer Blome <[email protected]> 1346938344 +0200 checkout: moving from master to MySuperBranch
SHA1 z przodu odnoszą się do zatwierdzeń. Powinieneś być w stanie je znaleźć na przykład w dzienniku oddziału
.git/logs/refs/heads/master
.refs/heads/master
Brakuje również danych wyjściowych git reflog, które podałeś . Jego jedyną zawartością ma być SHA1 najnowszego zatwierdzenia na nim (i nowego wiersza). Na przykład najnowszy SHA1 znajduje się na końcu dziennika oddziału.git/logs/refs/heads/master
.źródło
Jeśli .git / HEAD istnieje, a jego zawartość jest
ref: refs/heads/master
następnie sprawdzana w pliku refs / heads / master, musi on zawierać sha1 ostatniego zatwierdzenia.Jeśli ten plik jest uszkodzony i zawiera znaki NULL, edytuj ten plik i umieść sha1 ostatniego zatwierdzenia z
.git/logs/HEAD
lub przed ostatnim zatwierdzeniem.Więc zrób
git reset --hard 'sha1 of the commit that you selected'
źródło
Wygląda na to, że Twoje repozytorium zostało uszkodzone. Najłatwiej jest odzyskać swoje repozytorium z kopii zapasowej lub ponownie sklonować repozytorium z oryginalnego źródła (zakładając, że nie masz mnóstwo pracy w repozytorium).
Jeśli resotring / klonowanie nie jest możliwe, poleciłbym przeczytanie Pro Git (darmowa książka online lub wersja papierowa ). Cała książka jest bardzo pouczająca, ale szczególnie spójrz na ostatni rozdział, aby zrozumieć, jak działa Git wewnętrznie. Kiedy już zrozumiesz, jak działa Git, spójrz na instrukcje Linusa dotyczące odzyskiwania uszkodzonych obiektów .
źródło
Po pewnym czasie surfowania w sieci znalazłem to i zadziałało.
źródło
origin
(mam nadzieję, że nie za dużo pracy wykonanej lokalnie), a następnie zmusza lokalnymaster
oddział do uzgodnienia ze zdalnym. Ostrożnie,--reset
oznacza odrzuć wszelkie lokalne zmiany! Poza tym, gdyby nie był zbyt uszkodzony, po prostugit reset origin/master
przywróciłby ostatni znany (zarejestrowany) stanmaster
oddziału.