Git reflog
Git reflog
Git reflog nima?
git reflog branch’lar uchi (tip) va HEAD’dagi yangilanishlarni qayd etib boradi.
U branch’ingiz va HEAD qayerlarda bo‘lganini, hatto xato bilan kiritgan o‘zgarishlaringizni ham ko‘rish imkonini beradi.
Bu yo‘qolgan commit’larni tiklash yoki reset’ni bekor qilish uchun foydali.
Git reflog’dan qachon foydalanish kerak
git reflog buyrug‘idan quyidagi hollarda foydalaning:
- Yo‘qolgan commit’lar yoki o‘zgarishlarni tiklash kerak bo‘lganda
- Reset yoki merge’ni bekor qilish kerak bo‘lganda
- Branch’ingiz va HEAD tarixini ko‘rish kerak bo‘lganda
Reflog’ni ko‘rsatish
HEAD va branch’lar qayerlarga ko‘rsatganining tarixini ko‘rish uchun quyidagidan foydalaning:
Misol
git reflog
e56ba1f (HEAD -> master) HEAD@{0}: commit: Revert "Just a regular update, definitely no accidents here..."
52418f7 HEAD@{1}: commit: Just a regular update, definitely no accidents here...
9a9add8 (origin/master) HEAD@{2}: commit: Added .gitignore
81912ba HEAD@{3}: commit: Corrected spelling error
3fdaa5b HEAD@{4}: merge: Merge pull request #1 from w3schools-test/update-readme
836e5bf HEAD@{5}: commit: Updated readme for GitHub Branches
...
Bu HEAD’ning so‘nggi joylashuvlarini ro‘yxat qiladi, shunda commit, reset, merge va checkout kabi amallarni ko‘rishingiz mumkin.
Yo‘qolgan commit’larni topish va tiklash
Agar tasodifan commit’larni reset qilgan yoki o‘chirgan bo‘lsangiz, commit’ni topish va uni tiklash uchun reflog’dan foydalanishingiz mumkin.
Reflog’dagi har bir yozuv HEAD@{2} kabi havolaga ega.
Misol: Hard reset’ni bekor qilish
git reflog
e56ba1f (HEAD -> master) HEAD@{0}: commit: Revert "Just a regular update, definitely no accidents here..."
52418f7 HEAD@{1}: commit: Just a regular update, definitely no accidents here...
9a9add8 (origin/master) HEAD@{2}: commit: Added .gitignore
81912ba HEAD@{3}: commit: Corrected spelling error
...
git reset --hard HEAD@{2}
HEAD is now at 9a9add8 Added .gitignore
Bu branch’ingizni o‘sha paytdagi holatiga qaytaradi.
Reflog’ni tozalash
Reflog Git tomonidan avtomatik tozalanadi, lekin kerak bo‘lsa, eski yozuvlarning muddatini qo‘lda tugatishingiz mumkin:
Misol
git reflog expire --expire=30.days refs/heads/main
git gc --prune=now
Counting objects: 15, done.
Compressing objects: 100% (10/10), done.
Pruning objects
Bu main branch’i uchun 30 kundan eski reflog yozuvlarini o‘chiradi va axlat yig‘ishni (garbage collection) ishga tushiradi.
Maslahatlar va eng yaxshi amaliyotlar
- O‘zgarishlaringizni kuzatib borish uchun
git reflogbuyrug‘idan muntazam foydalaning - Yo‘qolgan commit’lar yoki o‘zgarishlarni tiklash uchun
git reflogbuyrug‘idan foydalaning - Eski yozuvlarni tozalash uchun
git reflog expirebuyrug‘idan foydalaning
Muammolarni bartaraf etish
Agar git reflog bilan muammolarga duch kelsangiz, quyidagilarni sinab ko‘ring:
- Qo‘shimcha ma’lumot uchun Git hujjatlarini ko‘rib chiqish
- Muayyan muammolar yechimini internetdan qidirish
- Git mutaxassisi yoki hamjamiyatidan yordam so‘rash
Ogohlantirishlar
Yo‘qolgan commit’lar yoki o‘zgarishlarni tiklash uchun git reflog buyrug‘idan foydalanishda ehtiyot bo‘ling, chunki u mavjud o‘zgarishlarni qayta yozib yuborishi mumkin.
W3Schools Pathfinder
Yutuqlaringizni kuzating – bu bepul!
