2014-10-03 14 views
5

Mam 2 oddziały w moim repozytorium. W żadnym z nich nie było żadnych niezatwierdzonych zmian.GIT Operacja ponownego podbicia została przerwana przez awarię komputera. Teraz repozytorium jest niedostępne.

Wyciągnąłem gałąź1, sprawdziłem gałąź2 i uruchomiłem branch2 rebase na branch1.
W połowie pracy mój komputer się zawiesił.

Po uruchomieniu, otwieram GitExtensions, aby stwierdzić, że moje repozytorium jest całkowicie puste, widzę migające 'rebase under way' lub coś w tym stylu, klikam to i wyskakuje mi okno, w którym muszę wybrać rozwiązanie konfliktów, co nie miało się stać. Jeśli kliknę "rozwiąż", otworzy się okno, w którym powinny być wyświetlane pliki będące w konflikcie i oczywiście ich nie ma.

Próbowałem kliknąć abort rebase, ale powiedziałem, że folder to not a git repository or any of the parents.

Od tego czasu nie mogę NIC. Nie mogę przerwać, nie widzę commitów. Otwieranie bitu git mówi mi tylko, że nie jest to repozytorium, gdy piszę, że to nie jest repozytorium.

No i nie obchodzi, że dużo o nieudanej rebase Ale ja zauważyłem, że wszystkie moje pliki źródłowe zwrócił się do plików binarnych i to znaczy, moi unpushed commity zostaną utracone, chyba że chłopaki mogą mi pomóc go odzyskać.

Chciałem odrodzić oddział i popchnąć go ... to jest frustrujące.

EDIT 1:

.git katalog jest katalogiem repozytorium (/some/path/to_repo/repo_name/.git), jak należy. Awaria komputera zakończyła się w momencie ponownego użycia potwierdzenia branch2. Oznacza to, że branch1 commit zostały już zastosowane do branch2, jedyne co zostało, to dokończenie stosowania branch2 commitów. I rozbił się po tym, jak zastosowano 10 lub 20 zatwierdzeń.

Mam teraz porównać direcotries .git klonowanego repo i ten, który rozbił.

sklonowanego repo miał te foldery:
haki
informacji
kłody
obiektów
bibl
i te pliki:
config
opis
HEAD
indeks
pakowane-bibl

rozbitego jeden ma dodatkowy folder o nazwie rebase-apply również dodatkowe pliki:
COMMIT_EDITMSG
FETCH_HEAD
ORIG_HEAD

Wszystko inne wydaje się pasować. Nie chodziłem do folderów głębiej. I nie próbowałem porównywać zawartości pliku.

+1

Gdzie jest katalog .git? Co jest w środku? Repo nie powinno być uszkodzone, chyba że git został przerwany w trakcie pisania repozytorium (co nie zdarza się często). – nneonneo

+0

Dodałem dodatkowe informacje jako Edytuj, proszę sprawdzić to i powiedzieć, czy muszę podać więcej. – user1651105

+1

Ogólnie git mówi, że jeśli 'HEAD' nie istnieje. W środku rebase "HEAD" będzie zawierać surowy SHA-1, może zawiera on uszkodzony lub wcale? W takim przypadku umieszczenie prawidłowego "HEAD" w miejscu może doprowadzić cię do następnego kroku. – torek

Odpowiedz

9

Po sprawdzeniu plików katalogowych .git, zauważyłem, że pliki ORIG_HEAD i HEAD zawierają tylko NULLS.Wygląda na to, że w końcu zorientowałem się, jak to naprawić.

  1. Usunięto plik index.
  2. Usunięto plik ORIG_HEAD.
  3. Usunięto plik HEAD.
  4. Wykonane kopię FETCH_HEAD (było wskazując na Branch1)
  5. przemianowany na kopię HEAD
  6. Czynny GIT Bash
  7. nawigować do repozytorium katalog.
  8. Przebiegł git status, aby sprawdzić, czy widzi, że katalog jest repozytorium. (Tak)
  9. Wykonano polecenie git reset.
  10. Komenda Ran git rebase --abort.

W tym momencie wszystkie pliki źródłowe binarne były plikami tekstowymi. Również plik index został odtworzony.

Kiedy otworzyłem repozytorium przez GitExtensions, wszystko wydawało się być normalne, przed ponownym podbiciem. Próbowałem rebase jeszcze raz, ale zatrzymał się w jednym z zatwierdzeń z błędem
error: unable to unpack d447b241eba771f175cb2150eec77ec605a86486 header error: inflateEnd: stream consistency error (no message) fatal: d447b241eba771f175cb2150eec77ec605a86486 is not a valid object

  1. I klonuje repozytorium (z lokalnego serwera GIT) do innego folderu.
  2. Skopiowano pliki źródłowe z odzyskanego repozytorium do nowo sklonowanego.
  3. Sprawdź, czy pokazał mi, że wszystkie wprowadzone przeze mnie zmiany są poprawne i żadne zatwierdzenia nie zostaną utracone.
  4. Zatwierdziła wszystkie zmiany jako 1 commit (no cóż).
  5. Pushed.

To wszystko. Teraz znowu działa. Wydaje się, że nie zrobiłem żadnych szkód.

+0

To właśnie uratowało mi życie. –

+0

Mój komentarz jest taki sam jak Brian! Ufff Nie ma wystarczającej liczby +1 dla tej odpowiedzi –

+0

Koleś właśnie uratowałeś moje życie. Dałbym ci +50, gdybym mógł. – JNYRanger

Powiązane problemy