Git Reflog i odzyskiwanie historii
Opanuj `git reflog`, aby odzyskiwać utracone commity lub gałęzie i zapewnić sobie zabezpieczenie dla wykonywanej pracy.
Git Reflog i odzyskiwanie historii to bezpłatna lekcja Git & GitHub Professional Workflow na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Git & GitHub Professional Workflow, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Git & GitHub Professional Workflow zawiera 4 lekcji w sumie.
Czym jest Git Reflog?
Zdarzyło się Państwu przypadkowo usunąć gałąź albo zresetować repozytorium do niewłaściwego commita? Proszę zachować spokój! Git ma potężny mechanizm zabezpieczający o nazwie Reflog.
Reflog (dziennik referencji) to zapis tego, gdzie znajdowały się elementy HEAD i wskaźniki gałęzi w Państwa lokalnym repozytorium.
Jak Reflog śledzi historię
W przeciwieństwie do historii commitów (git log), która śledzi zmiany w plikach projektu, reflog śledzi zmiany w referencjach repozytorium.
Za każdym razem, gdy element HEAD (bieżący commit) lub wskaźnik gałęzi zmieni położenie, Git zapisuje to zdarzenie w reflogu. Obejmuje to:
- Commitowanie zmian
- Przełączanie gałęzi
- Scalanie lub zmianę bazy (rebase)
- Wykonanie resetu
- Klonowanie repozytorium
Wyświetlanie reflogu
Aby wyświetlić reflog, wystarczy użyć polecenia git reflog. Pokazuje ono listę działań oraz stan elementu HEAD w danym momencie.
Przeprowadźmy symulację kilku działań, a następnie wyświetlmy reflog:
git init my_repo
cd my_repo
echo "First line" > file.txt
git add file.txt
git commit -m "Initial commit"
echo "Second line" >> file.txt
git add file.txt
git commit -m "Add second line"
git reflogOdczytywanie wpisów reflogu
Każdy wpis reflogu ma określony format. Rozłóżmy na części typowy wpis, który mogą Państwo zobaczyć:
a1b2c3d HEAD@{0}: commit: Add new feature
a1b2c3d: Hasz SHA-1 commita, w którym znajdował się elementHEADw danym momencie.HEAD@{0}: To „wskaźnik wpisu reflogu”.@{0}oznacza najnowszy stan,@{1}stan wcześniejszy, i tak dalej.commit: Add new feature: Opis działania, które spowodowało przemieszczenie elementuHEAD.
Te wskaźniki mają kluczowe znaczenie podczas odzyskiwania danych!
Scenariusz: odzyskiwanie utraconego commita
Wyobraźmy sobie, że utworzyli Państwo commit, a następnie przypadkowo go cofnęli za pomocą polecenia git reset --soft HEAD~1. Tego commita nie ma już w historii bieżącej gałęzi, ale nie został naprawdę usunięty!
Reflog wciąż o nim pamięta. Przeprowadźmy symulację tego częstego błędu:
git init my_project_recovery
cd my_project_recovery
echo "Initial content" > start.txt
git add start.txt
git commit -m "Initial commit"
echo "Important feature" > feature.txt
git add feature.txt
git commit -m "Added an important feature"
# Oops! Accidentally reset
git reset --soft HEAD~1
git reflogPrzywracanie commita
Po resecie, jeśli uruchomią Państwo git reflog, zobaczą wpis dotyczący commita „Added an important feature”, prawdopodobnie jako HEAD@{1} lub podobny.
Aby go odzyskać, można użyć polecenia git reset wraz z wpisem reflogu. Na przykład, jeśli hasz utraconego commita to abcdefg, a jego wpis reflogu to HEAD@{1}:
# Assuming the lost commit was HEAD@{1} in the reflog
git reset --hard HEAD@{1}
# Or using the specific commit hash from reflog
# git reset --hard abcdefg
# Now, check your log. The commit is back!
git log --onelineScenariusz: odzyskiwanie usuniętej gałęzi
Co zrobić, jeśli przypadkowo usunęli Państwo całą gałąź przed jej scaleniem albo uznali, że nie będzie już potrzebna?
Gałęzie są tylko wskaźnikami do commitów. Po usunięciu gałęzi commity, na które wskazywała, nie są od razu usuwane z repozytorium. Reflog wciąż pamięta, gdzie znajdował się element HEAD tej gałęzi!
Przywracanie gałęzi z reflogu
Załóżmy, że mieli Państwo gałąź o nazwie feature-x, pracowali na niej, a następnie usunęli ją za pomocą polecenia git branch -D feature-x.
Po uruchomieniu git reflog mogą Państwo zobaczyć wpis taki jak:
1234567 HEAD@{5}: branch: Created branch feature-x lubabcdefg HEAD@{2}: checkout: moving from feature-x to master
Można użyć hasza commita (np. 1234567 lub abcdefg) z wpisu reflogu, w którym gałąź była aktywna, aby ją odtworzyć:
# Assume 'feature-x' was deleted and its last commit was '1234567'
# Create a new branch pointing to that commit
git branch feature-x-recovered 1234567
# Now, check out your recovered branch
git checkout feature-x-recovered
# Verify its history
git log --onelineWygasanie wpisów reflogu
Choć reflog jest potężnym mechanizmem zabezpieczającym, jego wpisy nie są przechowywane wiecznie. Po określonym czasie Git usuwa stare wpisy reflogu.
- Domyślnie wpisy osiągalne (z bieżącego elementu
HEAD) wygasają po 90 dniach. - Wpisy nieosiągalne (np. pochodzące z usuniętych gałęzi lub commitów, do których nic już nie odwołuje) wygasają po 30 dniach.
Dlatego „utraconą” pracę najlepiej odzyskać jak najszybciej!
Wyzwanie: odzyskiwanie z reflogu
Utworzyli Państwo nową gałąź funkcjonalności, wykonali kilka commitów, a następnie przypadkowo usunęli ją bez scalania. Uruchamiają Państwo git reflog i widzą taki wpis:
...
c0ffee1 HEAD@{3}: commit: Implement new user profile page
bada55e HEAD@{4}: checkout: moving from feature/profile to main
...Jaka sekwencja poleceń prawidłowo odtworzy gałąź feature/profile, wskazując ją na najnowszy commit sprzed usunięcia?
Reflog: zabezpieczenie Git
Opanowali już Państwo obsługę git reflog — kluczowego narzędzia do odzyskiwania „utraconej” pracy w lokalnym repozytorium Git. Proszę pamiętać:
- Śledzi ono położenie elementu
HEADoraz wskaźników gałęzi. - Polecenie
git reflogsłuży do wyświetlania tej historii. - Commity lub gałęzie można odzyskać za pomocą poleceń
git resetlubgit branch, używając wpisów reflogu (HEAD@{n}lub haszy commitów). - Wpisy reflogu wygasają, dlatego w razie potrzeby odzyskania danych należy działać szybko!
Warto dbać o porządek w historii Git, ale należy pamiętać, że reflog jest dostępny w sytuacjach awaryjnych!
Często zadawane pytania
Czy lekcja „Git Reflog i odzyskiwanie historii” jest bezpłatna?
Tak — pełny tekst „Git Reflog i odzyskiwanie historii” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Git & GitHub Professional Workflow, przejdź na CoddyKit PRO. Kurs Git & GitHub Professional Workflow zawiera 4 lekcji w sumie.
Co nauczysz się w „Git Reflog i odzyskiwanie historii”?
Opanuj `git reflog`, aby odzyskiwać utracone commity lub gałęzie i zapewnić sobie zabezpieczenie dla wykonywanej pracy. Ćwiczysz Git & GitHub Professional Workflow z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Git & GitHub Professional Workflow?
Nie wymagamy żadnego doświadczenia. Git & GitHub Professional Workflow w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.
Ile czasu zajmuje lekcja „Git Reflog i odzyskiwanie historii”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Git & GitHub Professional Workflow?
Tak. Każda lekcja Git & GitHub Professional Workflow zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Git Reflog i odzyskiwanie historii
- Git Bisect do debugowania
- Utrzymanie i porządkowanie repozytorium
- Przepisywanie historii za pomocą git filter-repo