Powiedzmy, że mam taki wykres:
A---B---C---D (master)
\
\-E---F (HEAD)
Jeśli to zrobię git log --all --oneline
, otrzymam wszystkie sześć zatwierdzeń.
Ale jeśli wykres jest
A---B---C---D (master, HEAD)
\
\-E---F
Nie zobaczę E i F. Czy mogę poprosić gita, aby powiedział mi o wszystkich zatwierdzeniach, łącznie z tymi w gałęziach, które nie są nazwane?
Dzięki
commit --amend
lubrebase
, powiedzmy, przypadkowo osieroconym przez pracę z odłączoną GŁOWĄ.git commit --amend
itp. Opuszczania ślepej uliczki , utraconych zatwierdzeń. Zrobiłem trochę ponownego bazowania i tak dalej, a skończyło się na niektórych zatwierdzeniach nieosiągalnych z żadnych gałęzi i poczułem się trochę brudny, zostawiając je w repozytorium. Teraz ta myśl nie jest już tak niepokojąca. :)git fsck --unreachable
nie zapewnia tego. Właśnie tego spróbowałem. Lepszym podejściem jest--reflog
opcjagit log
, jak odpowiedział kenorb . Szczególnie miłe w tym jest to, że w połączeniu z--graph
, otrzymujesz łatwy do przeanalizowania kontekst wizualny, podobny do tego zilustrowanego w oryginalnym pytaniu. Na przykład spróbuj:git log --graph --all --oneline --reflog
Próbować:
która wyświetla listę wszystkich zatwierdzeń gita, udając, że wszystkie obiekty wymienione przez reflogs (
git reflog
) są wymienione w wierszu poleceń jako<commit>
.źródło
Kiedy rozwiązuję ten problem, używam następującego polecenia:
To pozwala mi wizualizować ostatnie zatwierdzenia, które stały się bezgłowe.
Mam to zapakowane w pomocnika skryptu o nazwie
~/bin/git-reflog-gitk
.źródło
when the tips of branches and other references were updated in the *local repository*
. Możesz użyć,git log --reflog
jeśli chcesz to zrobić dla nielokalnych zmian referencyjnychTo, co uratowało mi życie, to polecenie:
Znajdziesz tam ekran z zatwierdzeniami historii wykonanymi do gita, jak ten:
W tym momencie musisz tylko znaleźć to
HEAD@{X}
, czego potrzebujesz, utworzyć tymczasową gałąź i przejść do niej w następujący sposób:W ten sposób będziesz mieć tymczasową gałąź z utraconym zatwierdzeniem bez ponownego bazowania lub niszczenia jeszcze bardziej repozytorium git.
Mam nadzieję że to pomoże...
źródło
Podobnie jak odpowiedź @Kieran, ale dla konsoli:
git log --oneline --all --graph --decorate $(git reflog | awk '{print $1}')
źródło
git log --all
. Szybki przykład: pogit reset --hard @^
twoim HEAD @ {0} commit będzie tylko w reflogu, a ponieważgit reflog
nie obsługuje--graph
, musisz przekazać commits do,git log --graph
aby uzyskać wizualną reprezentację.--reflog
zamiast$(git reflog | awk '{print $1}')
git log --oneline --all --graph --decorate $(git reflog | awk '{print $1}')
zgit log --oneline --all --graph --decorate --reflog
nimi są prawie identyczne, z wyjątkiem --reflog zawiera szczegóły, takie jak wpisy WIP.reflog
dlaczego nie użyćlog --reflog
zamiast tego?Jak rozwiązać ten problem? Używaj
git fsck
i loguj!Najpierw utwórz plik zawierający utracone (nieosiągalne) zatwierdzenia i obiekty blob. (UWAGA: jeśli zrobiłeś coś takiego,
git gc
to zbierze wszystkie zatwierdzone przez nich zatwierdzenia i nie znajdziesz ich tutaj!)To daje taki plik:
Następnie możesz otworzyć ten plik w swoim ulubionym edytorze tekstu, aby skopiować stamtąd skróty zatwierdzenia / blogu. (* kaszel * makra Vima działają świetnie na ten * kaszel *)
Teraz możesz zalogować się ponownie z tego zatwierdzenia za pomocą czegoś takiego jak
git log --oneline <commit hash>
. Alternatywnie powinien działać gitk, tig lub inna przeglądarka git.W twoim przypadku, jeśli znajdziesz hash dla zatwierdzenia F, dziennik pokaże ci coś takiego:
Szybko i łatwo! Teraz możesz znaleźć kontekst wszystkich tych wiszących zatwierdzeń.
PS Tak, wiem, późny post, ale cóż, ktoś może go tutaj znaleźć i uznać za przydatny. (Najprawdopodobniej ja za 6 miesięcy, kiedy ponownie to wygoogluję)
źródło
Miałem szczęście odzyskać zatwierdzenie, patrząc na reflog, który znajdował się pod adresem
.git/logs/HEAD
Następnie musiałem przewinąć do końca pliku i znalazłem zatwierdzenie, które właśnie straciłem.
źródło
Będziemy
git log
czasami nie jest dobry, aby dostać wszystko, popełnia szczegół, tak aby ten ...Mac: przejdź do projektu git i wpisz:
aby zobaczyć wszystkie twoje zatwierdzenia w tym lub:
aby zobaczyć wszystkie zobowiązania w tym,
możesz edytować w dowolnej ulubionej przeglądarce.
źródło
@bsimmons
Następnie utwórz gałąź dla każdego z nich:
Teraz wiele narzędzi pokaże graficzną wizualizację tych utraconych zatwierdzeń.
źródło
Jeśli używasz GUI Git Extensions, może on pokazać graficzną wizualizację wiszących zatwierdzeń, jeśli zaznaczysz "Widok -> Pokaż odniesienia do reflogów". To pokaże wiszące zatwierdzenia w drzewie, tak jak wszystkie inne odniesienia. W ten sposób łatwiej jest znaleźć to, czego szukasz.
Zobacz ten obraz do demonstracji. Zatwierdzenia C2, C3, C4 i C5 na obrazie wiszą, ale są nadal widoczne.
źródło
uratował mnie! Straciłem podczas łączenia HEAD i nie mogłem znaleźć mojego ostatniego zatwierdzenia! Nie jest wyświetlane w drzewie źródłowym, ale wcześniej
git log --reflog
pokazałem wszystkie moje lokalne zatwierdzeniaźródło