Qaytarish (Rollback) dasturlashda: bu nima, usullari va qanday ishlaydi

Muallif: IT Sectr Nashr etilgan: 2026-07-30 O'qish vaqti: 7 daq

“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 — kod yoki ma’lumotlarni oldingi barqaror versiyaga qaytarish
  • Git revert o‘zgarishlarni bekor qiluvchi yangi commit yaratadi — xavfsiz qaytarish usuli
  • Git reset filial ko‘rsatkichini orqaga suradi va commitlar tarixini o‘chirishi mumkin
  • Ma’lumotlar bazasida rollback tugallanmagan tranzaksiyani bekor qiladi, ma’lumotlarni tiklaydi
  • Qaytarish usulini tanlash yolg‘iz yoki jamoada ishlashingizga bog‘liq

Dasturlashda qaytarish va rollback nima

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 vs git reset: farqi nima

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 qachon ishlatiladi

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.

bash
# Oxirgi commit-ni bekor qilib, yangi commit yarating
git revert HEAD

# Muayyan commit-ni hash bo‘yicha bekor qiling
git revert a1b2c3d

Reset qachon ishlatiladi

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.

bash
# 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

Ma’lumotlar bazalarida rollback: tranzaksiyalar va ACID

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.

sql
BEGIN TRANSACTION;

UPDATE accounts
SET balance = balance - 100
WHERE id = 1;

-- Rollback on error
ROLLBACK;

Savepoint: qisman qaytarish

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.

sql
SAVEPOINT sp1;

UPDATE orders SET status = 'cancelled'
WHERE id = 42;

ROLLBACK TO sp1;

Joylashtirishda qaytarish: strategiyalar va vositalar

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 deployment

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 release avtomatik qaytarish bilan

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.

yaml
apiVersion: apps/v1
kind: Deployment
spec:
  replicas: 10
  strategy:
    rollingUpdate:
      maxUnavailable: 1
      maxSurge: 1

Dasturlashda qaytarishning amaliy misollari

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.

Stsenariy 1: main-ga tasodifiy commit

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.

bash
git checkout main
git pull origin main
git revert HEAD
git push origin main

Stsenariy 2: muvaffaqiyatsiz ma’lumotlar bazasi migratsiyasi

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.

Stsenariy 3: tanqidiy xato bilan joylashtirish

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

Git revert va git reset o‘rtasidagi farq nima?

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.

Git reset --hard dan so‘ng ma’lumotlarni qaytarish mumkinmi?

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.

SQL tranzaksiyasida rollback qanday ishlaydi?

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 nima va nima uchun kerak?

Savepoint — tranzaksiya ichidagi oraliq saqlash nuqtasi. Butun tranzaksiyani bekor qilmasdan unga qisman qaytishga imkon beradi. Ko‘p bosqichli uzoq operatsiyalarda qulay.

CI/CD da qaytarishni qanday avtomatlashtirish mumkin?

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

  • Qaytarish (rollback) — kod, ma’lumotlar yoki ilovani oldingi barqaror versiyaga qaytarish
  • Git revert — tarixni saqlagan holda jamoa ishi uchun xavfsiz qaytarish
  • Git reset — faqat lokal filiallar uchun mos bo‘lgan buzuvchi qaytarish
  • Ma’lumotlar bazasida rollback WAL jurnaliga asoslanadi va tranzaksiyalar atomikligini kafolatlaydi
  • Savepoint uzoq tranzaksiyani qisman qaytarishga imkon beradi
  • Blue-green va canary — bir zumda qaytarish bilan joylashtirish strategiyalari
  • Tiklanish vaqtini minimallashtirish uchun ko‘rsatkichlar asosida qaytarishni avtomatlashtiring

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.

Loyihani muhokama qilish

Shuningdek o'qing