2012-05-07 57 views
8

Mam poważny problem przy próbie wykonania git rebase --interactive na moim repo. Dostaję tajemniczy błąd fatal: ref HEAD is not a symbolic ref, a mój rebase przestaje działać. Muszę git rebase --abort, aby powrócić do dobrego stanu.Nie mogę git rebase - już jest aktywny

Oto wyjście (s) Otrzymuję: https://gist.github.com/d38f1e2d2ec9bc480b6f

Co mi powiedziano w przeszłości, że jest to spowodowane faktem, że jestem w „odłączonym Head” tryb, ale w jaki sposób Znalazłem się w podstawce, gdybym był w tym trybie? Z całą pewnością zaczynam od master, następnie uruchamiając git rebase --interactive i modyfikując plik tekstowy git-rebase-todo na to, co chcę. I wtedy ten błąd się dzieje.

Poprosiłem wszystkich tutaj w pracy, a niektórzy ludzie @ # git na freenode. Wydaje się, że nikt nie rozumie mojego problemu lub nie wie, jakie to rozwiązanie. Wyszukiwarka Google dla tego błędu nic nie dała, odpowiednie wyszukiwania w StackOverflow nie dowiodły niczego. Nie mogę tego zrozumieć, a to jest naprawdę kulawe, idąc od zgniatania każdego zatwierdzenia, które popycham do opanowania, aby teraz pchnąć każdą niewielką zmianę, którą wprowadzam jako własne oddzielne zatwierdzenie.

+0

Zasobnik succezsfull -i jest opisany tutaj: http://davidstechtips.com/2011/03/collapsing-commits-in-git/. W twoim przypadku spróbuj 'git checkout master ', np. '8bbfbba' może? Lub nie zrobiłeś 'git rebase --continue' po konflikcie? – VonC

+1

Możliwe, że nadal znajdujesz się w poprzednim rebase, który odłącza głowę podczas jej ponownego przetwarzania. Może się to zdarzyć z łatwością podczas dużego przebicia w żarze naprawiania bieżącego interaktywnego kroku i możesz się rozproszyć. Właśnie pracowałem nad rebase, w którym miałem dużo pracy (wiele małych kroków), ale skończyłem robiąc oddzielny 'rebase -i' na każdy krok tak, żebym się nie zgubił. Pomocne będzie również uruchomienie wizualizatora git-gui i gitk. [upewnij się, że zaczynasz od jednej ze swoich lokalnych oddziałów] –

+0

Możesz ustalić, czy faktycznie jesteś w oddzielnym trybie HEAD, patrząc na zawartość '.git/HEAD', jeśli zawiera tekst taki jak" ref: refs/heads/... "nie jesteś _ w oddzielnym trybie HEAD. Jeśli, z drugiej strony, zawiera on identyfikator SHA-ID (na przykład pełen ciąg liter i cyfr), rzeczywiście znajduje się w oddzielnym trybie HEAD. –

Odpowiedz

3

Podczas "git rebase" sprawdzany jest punkt odniesienia, od którego się przegrupowałeś. Jeśli ten ref jest zatwierdzeniem, otrzymasz odłączoną głowę; jeśli jest to odwołanie do oddziału, to gałąź jest wyrejestrowana. Jeśli podczas zatwierdzania pojawi się FATAL, to pozostaniesz z katalogiem roboczym w stanie zniekształconym. Na przykład, jeśli byłeś w oddziale Foo i próbowałeś odejść od Baru, to po FATAL będziesz na Bar lub gdzieś po Bar z kilkoma zatwierdzeniami rebase. Odzyskasz zdrowie przez sprawdzenie Foo jako prostej.

git rebase --abort 

lub, jeśli jest naprawdę rebase zaklinowany (zobacz odniesienia poniżej), jak:

git checkout -f Foo 

Po tym, można bezpiecznie wypróbować rebase ponownie spróbować debugowania, dlaczego pojawia się śmiertelne. Here to przypadek, gdy baza danych nie działa, gdy brakuje pamięci, a "git rebase --abort" nie działa.

+1

Użycie 'git checkout -f' nie rozwiązuje mojego problemu. Robiłem 'git rebase --abort', aby za każdym razem wydostać się z bazy. Oto, co otrzymuję, gdy próbuję 'git checkout -f': https://gist.github.com/4d3aa867602f1e438e9b – tubbo

+0

Wynika to z mojego używania' git-tracker'. Przepraszam!! – tubbo

+0

Używanie "git rebase --abort" jest preferowanym podejściem; ale to nie zawsze działa (patrz referencja) – GoZoner