Geri qaytarma (Rollback) proqramlaşdırmada: bu nədir, üsulları və necə işləyir

Müəllif: IT Sectr Dərc olunub: 2026-07-30 Oxuma vaxtı: 7 dəq

“Geri qaytarma” və “rollback” — sistemin, kodun və ya verilənlərin əvvəlki vəziyyətinə qaytarılması deməkdir. Proqramlaşdırmada bu, versiya nəzarət sistemlərinə, verilənlər bazalarına və yerləşdirmə mexanizmlərinə daxil edilmiş əsas əməliyyatdır. Git Documentation-ya görə, geri qaytarma əməliyyatları təhlükəsiz (yeni commit yaradan revert) və dağıdıcı (tarixçəni itirən reset) ola bilər. Onların arasındakı fərqləri anlamaq əvvəlki versiyaya qayıdarkən məlumat itkisinin qarşısını almağa kömək edir.

Başlıca

  • Geri qaytarmaq — kodu və ya verilənləri əvvəlki sabit versiyaya qaytarmaq
  • Git revert dəyişiklikləri ləğv edən yeni commit yaradır — təhlükəsiz geri qaytarma üsulu
  • Git reset budaq göstəricisini geri aparır və commit tarixçəsini silə bilər
  • Verilənlər bazasında rollback tamamlanmamış əməliyyatı ləğv edir, məlumatları bərpa edir
  • Geri qaytarma metodunun seçimi tək işlədiyinizdən və ya komandada çalışdığınızdan asılıdır

Proqramlaşdırmada geri qaytarma və rollback nədir

Geri qaytarma (rollback) — sistemin əvvəlki sabit vəziyyətinə qaytarılması əməliyyatıdır. Proqramlaşdırma kontekstində bu, Git-də commit-in ləğvi, verilənlər bazasında transaksiyanın geri alınması və ya serverdə tətbiqin əvvəlki versiyasının bərpası ola bilər. Termin ingilis dilindən “rollback”-dən gəlir və bütün platformaların proqramçılarının lüğətində möhkəm yerini tutmuşdur.

Geri qaytarma ehtiyacı yeni dəyişiklik funksionallığı pozduqda, səhvlərə səbəb olduqda və ya keyfiyyət yoxlamasından keçmədikdə yaranır. Yaxşı təşkil olunmuş inkişaf prosesində geri qaytarma uğursuzluq əlaməti deyil, iş axınına daxil edilmiş standart prosedurdur. Komanda problemli dəyişikliyi nə qədər tez geri qaytara bilsə, səhvin istifadəçilərə təsiri bir o qədər az olar.

Müxtəlif alətlər müxtəlif geri qaytarma mexanizmləri təklif edir: Git təhlükəsiz revert ilə dağıdıcı reset arasında seçim verir, verilənlər bazaları transaksiya rollback-ini dəstəkləyir, CI/CD sistemləri isə versiyalar arasında trafiki dəyişməyi bacarır. Yanaşma seçimi kontekstdən və dəyişiklik tarixçəsinin qorunması tələblərindən asılıdır.

Git revert vs git reset: fərq nədir

Git revert — əvvəlki commit-in dəyişikliklərini ləğv edən yeni commit yaradan təhlükəsiz geri qaytarma üsuludur. Tarixçə xətti olaraq qalır, bütün köhnə commitlər qorunur. Bu, bir neçə proqramçının işlədiyi ümumi budaqda geri qaytarma üçün yeganə düzgün seçimdir. git revert əmri tarixçəni silmir — geri qaytarma faktını yeni dəyişiklik kimi əlavə edir.

Git reset cari budağın göstəricisini göstərilən commit-ə aparır, bütün sonrakı dəyişiklikləri rədd edir. Bayraqdan asılı olaraq — soft, mixed və ya hard — reset işçi kataloqu və indeksi fərqli şəkildə idarə edir. Hard rejimi dəyişiklikləri tarixçədən tamamilə silir, bu da onu ümumi budaqlar üçün təhlükəli və yalnız lokal iş üçün yararlı edir.

Revert nə zaman istifadə olunmalı

Revert paylaşılan budaqlarda tətbiq edilir: main, develop, release. O, tarixçəni qoruyur və digər proqramçılara dəyişikliyin ləğv edildiyini anlamağa imkan verir. Revert-dən sonra git pull təhlükəsiz şəkildə yerinə yetirilə bilər — sistem yenidən yazılmış tarixçə ilə bağlı konfliktlər yaratmayacaq. Komanda işində revert standart olaraq qəbul edilir.

bash
# Son commit-i ləğv edərək yeni commit yaradın
git revert HEAD

# Müəyyən commit-i hash ilə ləğv edin
git revert a1b2c3d

Reset nə zaman istifadə olunmalı

Reset dəyişiklikləri hələ dərc etmədiyiniz lokal budaqda münasibdir. Təcrübə aparmışsınızsa və tarixçəni tamamilə təmizləmək istəyirsinizsə — reset hard bunu edəcək. Lokal budaqda commit-ləri ləğv etmək, lakin işçi kataloqda dəyişiklikləri yenidən commit üçün saxlamaq məqsədi ilə reset mixed istifadə edə bilərsiniz.

bash
# Son commit-i ləğv edin, dəyişiklikləri işçi kataloqda saxlayın
git reset HEAD~1

# Tam ləğv — dəyişikliklər həmişəlik silinir
git reset --hard HEAD~2

Verilənlər bazalarında rollback: transaksiyalar və ACID

Transaksiya rollback-i — cari transaksiya çərçivəsində edilmiş bütün dəyişiklikləri ləğv edən və verilənlər bazasını onun başlandığı andakı vəziyyətinə qaytaran əməliyyatdır. Bu, atomikliyi — ACID-in (Atomicity, Consistency, Isolation, Durability) dörd prinsipindən birini təmin edir. Transaksiyanın hər hansı mərhələsində səhv baş verərsə, rollback yerinə yetirilir və məlumatlar ilkin vəziyyətinə qayıdır.

Rollback mexanizmi öncədən yazma jurnalı (Write-Ahead Log, WAL) vasitəsilə həyata keçirilir. Məlumat səhifəsini dəyişdirməzdən əvvəl, VSYS jurnalda köhnə və yeni dəyəri qeyd edir. Rollback zamanı sistem jurnalı oxuyur və bütün dəyişdirilmiş səhifələr üçün ilkin dəyərləri bərpa edir. Bu, hətta enerji kəsilməsi zamanında belə transaksiyanın düzgün şəkildə ləğv oluna biləcəyini təmin edir.

sql
BEGIN TRANSACTION;

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

-- Rollback on error
ROLLBACK;

Savepoint: qismən geri qaytarma

Uzun transaksiyalarda savepoint — bütün transaksiyanı bitirmədən geri qayıda biləcəyiniz aralıq saxlama nöqtələrindən istifadə etmək rahatdır. Bu, mürəkkəb əməliyyat daxilində səhvləri idarə etməyə, digər hissələrdə irəliləyişi itirməməyə imkan verir. Savepoint əksər relyasiya VSYS tərəfindən dəstəklənir: PostgreSQL, MySQL, Oracle.

sql
SAVEPOINT sp1;

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

ROLLBACK TO sp1;

Yerləşdirmədə geri qaytarma: strategiyalar və alətlər

Yerləşdirmənin geri qaytarılması — uğursuz yerləşdirmədən sonra işləyən tətbiqin əvvəlki versiyasına qaytarılmasıdır. Bu, istehsal mühiti üçün kritik əhəmiyyət daşıyır: bərpa müddəti (MTTR) birbaşa SLA və istifadəçi təcrübəsinə təsir edir. Müastir platformalar memarlıqdan və əlçatımlılıq tələblərindən asılı olaraq bir neçə geri qaytarma strategiyası təklif edir.

Blue-green deployment

Blue-green — eyni anda iki eyni mühitin işlədiyi strategiyadır: blue (cari versiya) və green (yeni versiya). Trafik uğurlu yerləşdirmədən sonra green-ə yönləndirilir. Yeni versiya düzgün işləməzsə, trafik açarı blue-ə qayıdır. Geri qaytarma ani şəkildə həyata keçirilir, yenidən yerləşdirmə tələb olunmur — marşrutizasiyanı dəyişmək kifayətdir.

Canary release avtomatik geri qaytarma ilə

Canary deployment trafikin kiçik bir hissəsini yeni versiyaya yönləndirir və metrikaları izləyir: səhv sayı, cavab müddəti, uğurlu sorğuların faizi. Metrikalar pisləşərsə, sistem avtomatik olaraq canary-ni geri qaytarır və bütün trafiki sabit versiyaya yönləndirir. Kubernetes və service mesh-lər (Istio, Linkerd) bu strategiyanı qutudan çıxan kimi dəstəkləyir.

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

Proqramlaşdırmada geri qaytarmanın praktik nümunələri

Üç tipik ssenarini nəzərdən keçirək, burada proqramçı dəyişiklikləri geri qaytarmalıdır. Hər ssenari öz yanaşmasını tələb edir — terminalda sadə əmrdən CI/CD iştirakı ilə çoxmərhələli prosedura qədər.

Ssenari 1: main-ə təsadüfi commit

Siz təsadüfən main budağına səhv olan commit göndɔrdünüz. Vəzifəniz komanda üçün tarixçəni itirmədən dəyişiklikləri geri qaytarmaqdır. Ləğv edən commit yaratmaq üçün git revert istifadə edin, sonra git push. Komandanın bütün üzvləri geri qaytarma faktını görəcək və konfliktlər olmadan işlərinə davam edə biləcəklər. Bu, ən təhlükəsiz və şəffaf üsuldur.

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

Ssenari 2: uğursuz verilənlər bazası miqrasiyası

Verilənlər bazasının miqrasiyası səhvlə başa çatdı və məlumatların bir hissəsi zədələndi. Miqrasiya skriptində transaksiya rollback-indən və artıq tətbiq edilmiş dəyişikliklər üçün ehtiyat nüsxadan bərpadan istifadə edin. Yaxşı dizayn edilmiş sistemdə hər miqrasiya transaksiyaya bürünür — səhv zamanı VSYS avtomatik olaraq rollback yerinə yetirir.

Ssenari 3: kritik səhvlə yerləşdirmə

Yeni versiyanın yerləşdirməsindən sonra avtorizasiyanın işləmədiyini aşkarladınız. Blue-green istifadə edirsinizsə, geri qaytarma marşrutizatoru geri çevirməkdir. Rolling update — kubectl rollout undo əmri əvvəlki versiyanı qaytaracaq. İdeal halda geri qaytarma prosesi avtomatlaşdırılmalı və bir dəqiqədən çox çəkməməlidir.

Tez-tez verilən suallar

Git revert və git reset arasındakı fərq nədir?

Revert dəyişiklikləri ləğv edən yeni commit yaradır və tarixçəni qoruyur. Reset budaq göstəricisini geri aparır və commit-ləri silə bilər. Ümumi budaqlar üçün yalnız revert istifadə edin.

Git reset --hard-dan sonra məlumatları geri qaytarmaq olarmı?

Commit-lər Git zibil yığanı tərəfindən yığılmayıbsa, onları git reflog vasitəsilə bərpa etmək olar. Lakin təmizləmədən sonra bərpa mümkün deyil. --hard yalnız lokal budaqlarda istifadə edin.

SQL transaksiyasında rollback necə işləyir?

Rollback əvvəlcədən yazma jurnalından (WAL) istifadə edərək cari transaksiyada edilmiş bütün dəyişiklikləri ləğv edir. VSYS bütün dəyişdirilmiş məlumat səhifələri üçün ilkin dəyərləri bərpa edir.

Savepoint nədir və nə üçün lazımdır?

Savepoint — transaksiya daxilində aralıq saxlama nöqtəsidir. Bütün transaksiyanı ləğv etmədən ona qismən qayıtmağa imkan verir. Çox addımlı uzun əməliyyatlarda rahatdır.

CI/CD-də geri qaytarmanı avtomatlaşdırmaq necə?

Yerləşdirmədən sonra health check və metrikaların monitorinqini qurun. Səhv həddi aşıldıqda, Spinnaker, ArgoCD və ya GitLab Auto Rollback kimi alət və ya skript vasitəsilə avtomatik geri qaytarmanı işə salın.

Nəticə

  • Geri qaytarma (rollback) — kodu, məlumatları və ya tətbiqi əvvəlki sabit versiyaya qaytarmaq
  • Git revert — tarixçəni qoruyaraq komanda işi üçün təhlükəsiz geri qaytarma
  • Git reset — yalnız lokal budaqlar üçün yararlı dağıdıcı geri qaytarma
  • Verilənlər bazasında rollback WAL jurnalına əsaslanır və transaksiyaların atomikliyini təmin edir
  • Savepoint uzun transaksiyanı qismən geri qaytarmağa imkan verir
  • Blue-green və canary — ani geri qaytarma ilə yerləşdirmə strategiyaları
  • Bərpa müddətini minimuma endirmək üçün metrikalar əsasında geri qaytarmanı avtomatlaşdırın

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun