To jest to, co się stało:
Mam gałąź A. W oddziale AI wprowadził szereg zmian. Nie byłem zadowolony z kodu, więc sprawdziłem poprzedni commit w gałęzi A. Następnie wprowadziłem kilka zmian i zatwierdziłem je w gałęzi A. Teraz nie mogę nigdzie znaleźć tego zatwierdzenia. Czy zgubiłem ten kod?
git reset
raczej wolałeś niżgit checkout
?HEAD
a gałąź A pozostałaby na poprzednim zatwierdzeniu. Jakie dokładnie polecenia wykonałeś?Odpowiedzi:
Stary commit jest nadal w reflogu.
Spowoduje to wyświetlenie listy zatwierdzeń i powinno tam znajdować się „utracone” zatwierdzenie. Możesz zrobić to w nowej gałęzi. Na przykład, jeśli SHA-1 to ba5a739, możesz utworzyć nową gałąź o nazwie „nowa-gałąź” w starym zatwierdzeniu za pomocą:
Zauważ, że „utracone” zatwierdzenia zostaną usunięte po wyczyszczeniu bazy danych.
źródło
git cherry-pick [SHA]
aby przenieść zatwierdzenie na istniejący oddział na wypadek, gdybyś przypadkowo popełnił błąd w stanie odłączonej głowyprune
usunąłoby również odłączone zatwierdzenia, do których odwołują się komunikaty o zatwierdzeniach? Czy to sprawia, że są osiągalne ?Twoje zatwierdzenia są nadal dostępne w reflogu, jak już wspomniano. Oprócz innych odpowiedzi, oto sposób na przejęcie odłączonych zatwierdzeń HEAD bezpośrednio do bieżącej gałęzi , bez tworzenia i scalania nowej gałęzi:
Wyszukaj skróty SHA-1 zatwierdzeń, które wykonałeś w odłączonym stanie HEAD
Następnie wykonaj, ze wszystkimi skrótami zatwierdzeń uporządkowanymi od najstarszego do najnowszego:
Na przykład gdybym miał tylko jeden, podany w formacie skrótu „pierwszych 7 znaków”:
Spowoduje to utworzenie nowych zatwierdzeń do Twojej bieżącej gałęzi, po jednym zatwierdzeniu na odłączony skrót-HEAD-commit, który wymienisz w poleceniu. Przejmuje również oryginalne komunikaty o zatwierdzeniach.
źródło
Możesz znaleźć zagubione (wiszące) zatwierdzenia za pomocą następującego polecenia:
Zauważ, że jeśli twoja obecna głowa jest zwisającym zatwierdzeniem, nie jest wymieniona jako utracona.
Możesz znaleźć więcej informacji na stronie podręcznika git-fsck (1)
Następnie możesz utworzyć gałąź na tym utraconym zatwierdzeniu:
źródło
Terminem Gita określającym stan katalogu roboczego jest „ odłączony HEAD ”. Oto kolejne miejsce,
git reflog
w którym oszczędzasz.Jeśli spróbuję wyewidencjonować inną gałąź, git-1.7.5.1 daje pomocną sugestię.
źródło
Nie zgubiłeś tego, Git nadal zachowuje kopię (ale obecnie jest nieosiągalna dla żadnej gałęzi). Możesz znaleźć brakujące zatwierdzenie za pomocą
git reflog
polecenia. Reflog śledzi historyczne pozycje główki gałęzi i możesz go użyć do znalezienia rzeczy, na które główka gałęzi wskazywała wcześniej.źródło
Wykonaj następujące kroki, aby połączyć odłączoną głowicę z powrotem z repozytorium git
git checkout "your branch with path but without remote name"
np. jeśli zdalna nazwa jest źródłem, a nazwa gałęzi jest
bugfix/somebranch
używanagit checkout bugfix/somebranch
git reflog
pobierz listę zmian SHA zatwierdzeń z listy zmian w odłączonej gałęzi.git cherry-pick "commit hash1" "commit hash2" "commit hash3"
git push
WSZYSTKO GOTOWE!!
źródło
W Sourcetree odkryłem, że git reflog nie działa, więc wymyśliłem, jak to zrobić, używając GUI.
Najpierw spróbuj znaleźć „utracone” zatwierdzenie, szukając komunikatu w historii poleceń (widok: Pokaż dane wyjściowe polecenia). Miejmy nadzieję, że znajdzie się on w poleceniu „Switching Branch” po zatwierdzeniu, które utraciłeś, a zobaczysz komentarz dotyczący zatwierdzenia z identyfikatorem zatwierdzenia 1234567.
Przejdź do następnego kroku w tym dokumencie.
Wciśnij przycisk „Rozgałęzienie” na górnym pasku narzędzi, a powinieneś otrzymać okno dialogowe „Nowa gałąź”, w którym możesz określić pewne zatwierdzenie. Umieść tam ten identyfikator zatwierdzenia, podaj nazwę nowej gałęzi, naciśnij Utwórz gałąź, a powinieneś otrzymać nową gałąź z utraconym zatwierdzeniem!
To przyniosło mi trochę straconej pracy!
źródło