“Qaytarish” va “rollback” — tizim, kod yoki ma’lumotlarni oldingi holatga qaytarishni anglatuvchi atamalar. Dasturlashda bu versiya nazorat tizimlari, ma’lumotlar bazalari va joylashtirish mexanizmlariga o‘rnatilgan asosiy operatsiyadir. Git Documentation-ga ko‘ra, qaytarish operatsiyalari xavfsiz (yangi commit yaratadigan revert) va buzuvchi (tarixni yo‘qotadigan reset) bo‘lishi mumkin. Ularning orasidagi farqlarni tushunish oldingi versiyaga qaytganda ma’lumot yo‘qotilishining oldini olishga yordam beradi.
Asosiy
Qaytarish (rollback) — tizimni oldingi barqaror holatga qaytarish operatsiyasi. Dasturlash kontekstida bu Git-da commit-ni bekor qilish, ma’lumotlar bazasida tranzaksiyani qaytarish yoki serverda ilovaning oldingi versiyasini tiklashni anglatishi mumkin. Atama ingliz tilidagi “rollback” dan kelib chiqqan va barcha platformalarning dasturchilari lug‘atida mustahkam o‘rnashgan.
Qaytarish zaruriyati yangi o‘zgarish funksionallikni buzganda, xatolarga sabab bo‘lganda yoki sifat tekshiruvidan o‘tmaganida yuzaga keladi. Yaxshi tashkil etilgan ishlab chiqish jarayonida qaytarish muvaffaqiyatsizlik belgisi emas, balki ish jarayoniga kiritilgan standart protseduradir. Jamoa muammoli o‘zgarishni qanchalik tez qaytara olsa, xatoning foydalanuvchilarga ta’siri shunchalik kam bo‘ladi.
Turli vositalar turli qaytarish mexanizmlarini taklif qiladi: Git xavfsiz revert va buzuvchi reset o‘rtasida tanlov beradi, ma’lumotlar bazalari tranzaksiyali rollback-ni qo‘llab-quvvatlaydi, CI/CD tizimlari esa versiyalar o‘rtasida trafikni almashtira oladi. Yondashuvni tanlash kontekstga va o‘zgarishlar tarixini saqlash talablariga bog‘liq.
Git revert — oldingi commit o‘zgarishlarini bekor qiluvchi yangi commit yaratadigan xavfsiz qaytarish usuli. Tarix chiziqli bo‘lib qoladi, barcha eski commitlar saqlanadi. Bu bir necha dasturchilar ishlaydigan umumiy filialda qaytarish uchun yagona to‘g‘ri tanlovdir. git revert buyrug‘i tarixni o‘chirmaydi — u qaytarish faktini yangi o‘zgarish sifatida qo‘shadi.
Git reset joriy filial ko‘rsatkichini belgilangan commit-ga suradi va keyingi barcha o‘zgarishlarni rad etadi. Bayroqqa qarab — soft, mixed yoki hard — reset ishchi katalog va indeksni turlicha boshqaradi. Hard rejimi o‘zgarishlarni tarixdan butunlay olib tashlaydi, bu uni umumiy filiallar uchun xavfli va faqat lokal ish uchun mos qiladi.
Revert umumiy filiallarda qo‘llaniladi: main, develop, release. U tarixni saqlaydi va boshqa dasturchilarga o‘zgarish bekor qilinganligini tushunishga imkon beradi. Revert-dan so‘ng git pull xavfsiz bajarilishi mumkin — tizim qayta yozilgan tarix bilan bog‘liq konfliktlarni yaratmaydi. Jamoa ishida revert standart hisoblanadi.
# Oxirgi commit-ni bekor qilib, yangi commit yarating
git revert HEAD
# Muayyan commit-ni hash bo‘yicha bekor qiling
git revert a1b2c3d
Reset o‘zgarishlarni hali chop etmagan lokal filialda o‘rinli. Agar tajriba o‘tkazgan bo‘lsangiz va tarixni butunlay tozalashni istasangiz — reset hard buni qiladi. Lokal filialda commit-larni bekor qilish, lekin o‘zgarishlarni qayta commit uchun ishchi katalogda saqlash maqsadida reset mixed-dan foydalanishingiz mumkin.
# Oxirgi commit-ni bekor qiling, o‘zgarishlarni ishchi katalogda saqlang
git reset HEAD~1
# To‘liq bekor qilish — o‘zgarishlar butunlay o‘chiriladi
git reset --hard HEAD~2
Tranzaksiya rollback-i — joriy tranzaksiya doirasidagi barcha o‘zgarishlarni bekor qiluvchi va ma’lumotlar bazasini uning boshlanish holatiga qaytaruvchi operatsiya. Bu atomiklikni — ACID (Atomicity, Consistency, Isolation, Durability) ning to‘rt tamoyilidan birini kafolatlaydi. Tranzaksiyaning istalgan bosqichida xato yuz bersa, rollback bajariladi va ma’lumotlar asl holatiga qaytadi.
Rollback mexanizmi oldindan yozish jurnali (Write-Ahead Log, WAL) orqali amalga oshiriladi. Ma’lumot sahifasini o‘zgartirishdan oldin, BBT eski va yangi qiymatni jurnalga yozadi. Rollback vaqtida tizim jurnalni o‘qiydi va barcha o‘zgartirilgan sahifalar uchun asl qiymatlarni tiklaydi. Bu hatto elektr uzilishida ham tranzaksiyaning to‘g‘ri bekor qilinishini kafolatlaydi.
BEGIN TRANSACTION;
UPDATE accounts
SET balance = balance - 100
WHERE id = 1;
-- Rollback on error
ROLLBACK;
Uzoq tranzaksiyalarda savepoint — butun tranzaksiyani tugatmasdan qaytishingiz mumkin bo‘lgan oraliq saqlash nuqtalaridan foydalanish qulay. Bu murakkab operatsiya ichida xatolarni boshqarishga, uning boshqa qismlarida taraqqiyotni yo‘qotmaslikka imkon beradi. Savepoint ko‘pchilik relyatsion BBT tomonidan qo‘llab-quvvatlanadi: PostgreSQL, MySQL, Oracle.
SAVEPOINT sp1;
UPDATE orders SET status = 'cancelled'
WHERE id = 42;
ROLLBACK TO sp1;
Joylashtirishni qaytarish — muvaffaqiyatsiz joylashtirishdan so¼ing ishlayotgan ilovani oldingi versiyaga qaytarish. Bu ishlab chiqarish muhiti uchun juda muhim xususiyat: tiklanish vaqti (MTTR) bevosita SLA va foydalanuvchi tajribasiga ta’sir qiladi. Zamonaviy platformalar arxitektura va mavjudlik talablariga qarab bir nechta qaytarish strategiyasini taklif qiladi.
Blue-green — bir vaqtning o‘zida ikkita bir xil muhit ishlaydigan strategiya: blue (joriy versiya) va green (yangi versiya). Trafik muvaffaqiyatli joylashtirishdan so‘ng green-ga yo‘naltiriladi. Agar yangi versiya noto‘g‘ri ishlasa, trafik kaliti blue-ga qaytadi. Qaytarish bir zumda amalga oshiriladi, qayta joylashtirish talab qilinmaydi — marshrutizatsiyani o‘zgartirish kifoya.
Canary deployment trafikning kichik qismini yangi versiyaga yo‘naltiradi va ko‘rsatkichlarni kuzatadi: xatolar soni, javob vaqti, muvaffaqiyatli so‘rovlar foizi. Ko‘rsatkichlar yomonlashsa, tizim avtomatik ravishda canary-ni qaytaradi va barcha trafikni barqaror versiyaga yo‘naltiradi. Kubernetes va service mesh-lar (Istio, Linkerd) bu strategiyani qutidan chiqqandek qo‘llab-quvvatlaydi.
apiVersion: apps/v1
kind: Deployment
spec:
replicas: 10
strategy:
rollingUpdate:
maxUnavailable: 1
maxSurge: 1
Uch odatiy stsenariyni ko‘rib chiqamiz, unda dasturchi o‘zgarishlarni qaytarishi kerak. Har bir stsenariy o‘z yondashuvini talab qiladi — terminaldagi oddiy buyruqdan tortib CI/CD ishtirokidagi ko‘p bosqichli protsedurachagacha.
Siz tasodifan main filialiga xatoli commit yubordingiz. Vazifangiz jamoa uchun tarixni yo‘qotmasdan o‘zgarishlarni qaytarishdir. Bekor qiluvchi commit yaratish uchun git revert dan foydalaning, so‘ng git push. Jamoaning barcha a’zolari qaytarish faktini ko‘radi va konfliktlarsiz ishni davom ettirishi mumkin. Bu eng xavfsiz va shaffof usul.
git checkout main
git pull origin main
git revert HEAD
git push origin main
Ma’lumotlar bazasi migratsiyasi xato bilan tugadi va ma’lumotlarning bir qismi shikastlandi. Migratsiya skriptida tranzaksiyali rollback dan va allaqachon qo‘llanilgan o‘zgarishlar uchun zaxiradan tiklashdan foydalaning. Yaxshi loyihalashtirilgan tizimda har bir migratsiya tranzaksiyaga o‘ralgan — xato bo‘lganda BBT avtomatik rollback-ni bajaradi.
Yangi versiyani joylashtirgandan so‘ng avtorizatsiya ishlamasligini aniqladingiz. Agar blue-green dan foydalansangiz, qaytarish marshrutizatorni qaytarishdir. Agar rolling update — kubectl rollout undo buyrug‘i oldingi versiyani qaytaradi. Ideal holatda qaytarish jarayoni avtomatlashtirilgan bo‘lishi va bir daqiqadan ko‘p vaqt olmasligi kerak.
Tez-tez beriladigan savollar
Revert o‘zgarishlarni bekor qiluvchi yangi commit yaratadi va tarixni saqlaydi. Reset filial ko‘rsatkichini orqaga suradi va commit-larni o‘chirishi mumkin. Umumiy filiallar uchun faqat revert dan foydalaning.
Agar commit-lar Git axlat yig‘uvchisi tomonidan yig‘ilmagan bo‘lsa, ularni git reflog orqali tiklash mumkin. Biroq tozalashdan so‘ng tiklash mumkin emas. --hard ni faqat lokal filiallarda ishlating.
Rollback oldindan yozish jurnali (WAL) yordamida joriy tranzaksiyadagi barcha o‘zgarishlarni bekor qiladi. BBT barcha o‘zgartirilgan ma’lumot sahifalari uchun asl qiymatlarni tiklaydi.
Savepoint — tranzaksiya ichidagi oraliq saqlash nuqtasi. Butun tranzaksiyani bekor qilmasdan unga qisman qaytishga imkon beradi. Ko‘p bosqichli uzoq operatsiyalarda qulay.
Joylashtirishdan so‘ng health check va ko‘rsatkichlar monitoringini sozlang. Xato chegarasidan oshganda, Spinnaker, ArgoCD yoki GitLab Auto Rollback kabi vosita yoki skript orqali avtomatik qaytarishni ishga tushiring.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.
Shuningdek o'qing