git reset — commit’larni orqaga qaytaradigan kuchli buyruq. Xato commit qildingizmi yoki bir necha commit’ni bekor qilmoqchimisiz — git reset uni hal qiladi. Biroq u eng xavfli buyruqlardan biri: uch rejimi bor va ba’zilari o’zgarishlarni butunlay yo’qotadi. Shuning uchun ehtiyotkorlik shart.
git reset — joriy tarmoqni oldingi commit holatiga qaytaradigan buyruq. Uning
--soft,--mixedva--hardrejimlari o’zgarishlar bilan turlicha ishlaydi.
Uch rejim
git reset ning uch rejimi o’zgarishlar taqdirini belgilaydi. Ularni jadvalda ko’ramiz:
| Rejim | Commit | Staging | O’zgarishlar |
|---|---|---|---|
--soft |
qaytadi | saqlanadi | saqlanadi |
--mixed (standart) |
qaytadi | tozalanadi | saqlanadi |
--hard |
qaytadi | tozalanadi | yo’qoladi |
--soft — eng yumshoq (hamma narsa qoladi), --hard — eng qattiq (hamma narsa o’chadi).
soft reset — commit’ni ochish
--soft oxirgi commit’ni “ochadi”, ammo o’zgarishlarni staging’da qoldiradi. Bu commit’larni birlashtirish yoki xabarni o’zgartirishda foydali:
git reset --soft HEAD~1
[Oxirgi commit ochildi, o'zgarishlar staging'da qoldi]
HEAD~1 — bir commit orqaga. --soft commit’ni bekor qildi, ammo o’zgarishlaringiz add qilingan holatda turibdi. Endi ularni qayta commit qilishingiz mumkin.
mixed reset — staging’ni tozalash
--mixed (standart) commit’ni ochadi va staging’ni tozalaydi, ammo o’zgarishlar working directory’da qoladi:
git reset HEAD~1
Unstaged changes after reset:
M salom.txt
O’zgarishlaringiz yo’qolmadi — faqat add va commit bekor qilindi. Bu “commit’ni ham, add’ni ham qaytaraman, lekin ishimni saqlayman” degani.
hard reset — DIQQAT!
--hard — eng xavfli: commit’ni, staging’ni va o’zgarishlarni butunlay o’chiradi:
git reset --hard HEAD~1
HEAD is now at a1b2c3d Oldingi commit
Diqqat: --hard saqlanmagan o’zgarishlarni qaytarib bo’lmaydigan tarzda yo’qotadi. Uni faqat o’zgarishlar kerak emasligiga to’liq ishonch bo’lganda ishlating. Push qilingan commit’larda esa umuman ishlatmang.
reset va revert
Muhim eslatma: git reset tarixni o’zgartiradi — shuning uchun u faqat mahalliy, push qilinmagan commit’lar uchun xavfsiz. Push qilingan commit’ni bekor qilish uchun git revert ishlatiladi (keyingi dars), chunki u tarixni buzmaydi.
Xulosa
Bu bo’limda git reset ning uch rejimini (--soft, --mixed, --hard), ularning farqini va --hard ning xavfini ko’rib chiqdik. git reset — kuchli, ammo ehtiyotkorlik talab qiladigan vosita. Keyingi darsda git revert bilan xavfsiz bekor qilishga o’tamiz.