Επαναφορά (Rollback) στην ανάπτυξη: τι είναι, τρόποι και πώς λειτουργεί

Συγγραφέας: IT Sectr Δημοσιεύτηκε: 2026-07-30 Χρόνος ανάγνωσης: 7 λεπ

«Επαναφορά» και «rollback» — όροι που σημαίνουν την επιστροφή του συστήματος, του κώδικα ή των δεδομένων σε προηγούμενη κατάσταση. Στην ανάπτυξη λογισμικού είναι μια θεμελιώδης λειτουργία, ενσωματωμένη σε συστήματα ελέγχου εκδόσεων, βάσεις δεδομένων και μηχανισμούς ανάπτυξης. Σύμφωνα με την Git Documentation, οι λειτουργίες επαναφοράς μπορεί να είναι ασφαλείς (revert με δημιουργία νέου commit) και καταστροφικές (reset με απώλεια ιστορικού). Η κατανόηση των διαφορών μεταξύ τους βοηθά στην αποφυγή απώλειας δεδομένων κατά την επιστροφή σε προηγούμενη έκδοση.

Κύρια σημεία

  • Επαναφορά — επιστροφή κώδικα ή δεδομένων σε προηγούμενη σταθερή έκδοση
  • Git revert δημιουργεί νέο commit που αναιρεί τις αλλαγές — ασφαλής τρόπος επαναφοράς
  • Git reset μετακινεί τον δείκτη του κλάδου πίσω και μπορεί να διαγράψει το ιστορικό commits
  • Rollback στη ΒΔ ακυρώνει μια μη ολοκληρωμένη συναλλαγή, επαναφέροντας τα δεδομένα
  • Η επιλογή μεθόδου επαναφοράς εξαρτάται από το αν εργάζεστε μόνοι ή σε ομάδα

Τι είναι η επαναφορά και το rollback στην ανάπτυξη

Επαναφορά (rollback) — λειτουργία επιστροφής του συστήματος σε προηγούμενη σταθερή κατάσταση. Στο πλαίσιο της ανάπτυξης, μπορεί να σημαίνει ακύρωση ενός commit στο Git, επαναφορά συναλλαγής στη βάση δεδομένων ή επιστροφή προηγούμενης έκδοσης εφαρμογής στον διακομιστή. Ο όρος προέρχεται από τα αγγλικά «rollback» και έχει καθιερωθεί στο λεξιλόγιο των προγραμματιστών όλων των πλατφορμών.

Η ανάγκη επαναφοράς προκύπτει όταν μια νέα αλλαγή σπάει τη λειτουργικότητα, προκαλεί σφάλματα ή δεν περνά τον ποιοτικό έλεγχο. Σε μια καλά οργανωμένη διαδικασία ανάπτυξης, η επαναφορά δεν είναι σημάδι αποτυχίας, αλλά μια τυπική διαδικασία ενσωματωμένη στη ροή εργασίας. Όσο πιο γρήγορα η ομάδα μπορεί να επαναφέρει μια προβληματική αλλαγή, τόσο μικρότερη είναι η επίδραση του σφάλματος στους χρήστες.

Διαφορετικά εργαλεία προσφέρουν διαφορετικούς μηχανισμούς επαναφοράς: το Git δίνει επιλογή μεταξύ ασφαλούς revert και καταστροφικού reset, οι βάσεις δεδομένων υποστηρίζουν συναλλακτικό rollback, και τα CI/CD συστήματα μπορούν να εναλλάσσουν την κυκλοφορία μεταξύ εκδόσεων. Η επιλογή προσέγγισης εξαρτάται από το πλαίσιο και τις απαιτήσεις για τη διατήρηση του ιστορικού αλλαγών.

Git revert vs git reset: ποια είναι η διαφορά

Git revert — ασφαλής τρόπος επαναφοράς που δημιουργεί νέο commit ακυρώνοντας τις αλλαγές του προηγούμενου. Το ιστορικό παραμένει γραμμικό, όλα τα παλιά commits διατηρούνται. Αυτή είναι η μόνη σωστή επιλογή για επαναφορά σε κοινόχρηστο κλάδο με πολλούς προγραμματιστές. Η εντολή git revert δεν διαγράφει ιστορικό — προσθέτει το γεγονός της επαναφοράς ως νέα αλλαγή.

Git reset μετακινεί τον δείκτη του τρέχοντος κλάδου στο καθορισμένο commit, απορρίπτοντας όλες τις επόμενες αλλαγές. Ανάλογα με τη σημαία — soft, mixed ή hard — το reset χειρίζεται διαφορετικά τον κατάλογο εργασίας και το ευρετήριο. Η λειτουργία hard διαγράφει εντελώς τις αλλαγές από το ιστορικό, καθιστώντας την επικίνδυνη για κοινόχρηστους κλάδους και κατάλληλη μόνο για τοπική εργασία.

Πότε να χρησιμοποιείτε το revert

Revert εφαρμόζεται σε shared-κλάδους: main, develop, release. Διατηρεί το ιστορικό και επιτρέπει σε άλλους προγραμματιστές να καταλάβουν ότι η αλλαγή ακυρώθηκε. Μετά από revert μπορείτε να κάνετε git pull με ασφάλεια — το σύστημα δεν θα δώσει συγκρούσεις που σχετίζονται με ξαναγραμμένο ιστορικό. Στην ομαδική εργασία, το revert είναι το προεπιλεγμένο πρότυπο.

bash
# Αναίρεση τελευταίου commit με δημιουργία νέου commit
git revert HEAD

# Αναίρεση συγκεκριμένου commit με hash
git revert a1b2c3d

Πότε να χρησιμοποιείτε το reset

Reset είναι κατάλληλο σε τοπικό κλάδο όπου δεν έχετε δημοσιεύσει ακόμη αλλαγές. Αν πειραματιζόσασταν και θέλετε να καθαρίσετε πλήρως το ιστορικό — το reset hard θα το κάνει. Σε τοπικό κλάδο μπορείτε να χρησιμοποιήσετε reset mixed για να ακυρώσετε commits αλλά να διατηρήσετε τις αλλαγές στον κατάλογο εργασίας για νέο commit.

bash
# Αναίρεση τελευταίου commit, διατήρηση αλλαγών στον κατάλογο εργασίας
git reset HEAD~1

# Πλήρης αναίρεση — οι αλλαγές διαγράφονται οριστικά
git reset --hard HEAD~2

Rollback σε βάσεις δεδομένων: συναλλαγές και ACID

Rollback συναλλαγής — λειτουργία που ακυρώνει όλες τις αλλαγές που έγιναν στα πλαίσια της τρέχουσας συναλλαγής και επαναφέρει τη βάση δεδομένων στην κατάσταση κατά τη στιγμή έναρξής της. Αυτό εγγυάται την ατομικότητα — μία από τις τέσσερις αρχές ACID (Atomicity, Consistency, Isolation, Durability). Αν σε οποιοδήποτε στάδιο της συναλλαγής προκύψει σφάλμα, εκτελείται rollback και τα δεδομένα επιστρέφουν στην αρχική τους θέση.

Ο μηχανισμός rollback υλοποιείται μέσω του ημερολογίου προειδοποιητικής εγγραφής (Write-Ahead Log, WAL). Πριν αλλάξει μια σελίδα δεδομένων, το ΣΔΒΔ καταγράφει την παλιά και τη νέα τιμή στο ημερολόγιο. Κατά το rollback, το σύστημα διαβάζει το ημερολόγιο και επαναφέρει τις αρχικές τιμές για όλες τις τροποποιημένες σελίδες. Αυτό εγγυάται ότι ακόμη και σε διακοπή ρεύματος, η συναλλαγή μπορεί να ακυρωθεί σωστά.

sql
BEGIN TRANSACTION;

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

-- Rollback on error
ROLLBACK;

Savepoint: μερική επαναφορά

Σε μεγάλες συναλλαγές είναι βολικό να χρησιμοποιείτε savepoint — ενδιάμεσα σημεία αποθήκευσης στα οποία μπορείτε να επαναφέρετε χωρίς να ολοκληρώσετε ολόκληρη τη συναλλαγή. Αυτό επιτρέπει τον χειρισμό σφαλμάτων εντός μιας σύνθετης λειτουργίας χωρίς να χάνετε πρόοδο σε άλλα μέρη της. Το Savepoint υποστηρίζεται από τις περισσότερες σχεσιακές ΣΔΒΔ: PostgreSQL, MySQL, Oracle.

sql
SAVEPOINT sp1;

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

ROLLBACK TO sp1;

Επαναφορά κατά το deploy: στρατηγικές και εργαλεία

Επαναφορά deploy — επιστροφή της εφαρμογής σε προηγούμενη έκδοση μετά από αποτυχημένη ανάπτυξη. Αυτή είναι μια κρίσιμη δυνατότητα για το περιβάλλον παραγωγής: ο χρόνος αποκατάστασης (MTTR) επηρεάζει άμεσα το SLA και την εμπειρία χρήστη. Σύγχρονες πλατφόρμες προσφέρουν διάφορες στρατηγικές επαναφοράς ανάλογα με την αρχιτεκτονική και τις απαιτήσεις διαθεσιμότητας.

Blue-green deployment

Blue-green — στρατηγική όπου λειτουργούν ταυτόχρονα δύο πανομοιότυπα περιβάλλοντα: blue (τρέχουσα έκδοση) και green (νέα έκδοση). Η κυκλοφορία μεταφέρεται στο green μετά από επιτυχημένο deploy. Αν η νέα έκδοση λειτουργεί εσφαλμένα, ο διακόπτης κυκλοφορίας επιστρέφει στο blue. Η επαναφορά γίνεται άμεσα, χωρίς επαναληπτικό deploy — αρκεί η αλλαγή δρομολόγησης.

Canary release με αυτόματη επαναφορά

Canary deployment κατευθύνει ένα μικρό ποσοστό κυκλοφορίας στη νέα έκδοση και παρακολουθεί μετρήσεις: αριθμό σφαλμάτων, χρόνο απόκρισης, ποσοστό επιτυχημένων αιτημάτων. Αν οι μετρήσεις χειροτερέψουν, το σύστημα επαναφέρει αυτόματα το canary και κατευθύνει όλη την κυκλοφορία στη σταθερή έκδοση. Το Kubernetes και τα service mesh (Istio, Linkerd) υποστηρίζουν αυτή τη στρατηγική out-of-the-box.

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

Πρακτικά παραδείγματα επαναφοράς στην ανάπτυξη

Ας εξετάσουμε τρία τυπικά σενάρια στα οποία ένας προγραμματιστής πρέπει να επαναφέρει αλλαγές. Κάθε σενάριο απαιτεί τη δική του προσέγγιση — από μια απλή εντολή στο τερματικό έως μια πολυσταδιακή διαδικασία με CI/CD.

Σενάριο 1: τυχαίο commit στο main

Κάνατε κατά λάθος push ενός commit με σφάλμα στο main. Στόχος σας είναι να επαναφέρετε τις αλλαγές χωρίς απώλεια ιστορικού για την ομάδα. Χρησιμοποιήστε git revert για να δημιουργήσετε ένα ακυρωτικό commit και στη συνέχεια git push. Όλα τα μέλη της ομάδας θα δουν την επαναφορά και θα μπορούν να συνεχίσουν χωρίς συγκρούσεις. Αυτός είναι ο ασφαλέστερος και πιο διαφανής τρόπος.

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

Σενάριο 2: αποτυχημένη μετεγκατάσταση ΒΔ

Η μετεγκατάσταση βάσης δεδομένων απέτυχε και μέρος των δεδομένων έχει υποστεί ζημιά. Χρησιμοποιήστε συναλλακτικό rollback στο σενάριο μετεγκατάστασης και επαναφορά από backup για ήδη εφαρμοσμένες αλλαγές. Σε ένα καλά σχεδιασμένο σύστημα, κάθε μετεγκατάσταση είναι τυλιγμένη σε συναλλαγή — σε περίπτωση σφάλματος, το ΣΔΒΔ εκτελεί αυτόματα rollback.

Σενάριο 3: deploy με κρίσιμο σφάλμα

Μετά το deploy νέας έκδοσης ανακαλύψατε ότι δεν λειτουργεί η ταυτοποίηση. Αν χρησιμοποιείτε blue-green, η επαναφορά είναι η μεταγωγή του router πίσω. Αν rolling update — η εντολή kubectl rollout undo θα επαναφέρει την προηγούμενη έκδοση. Στην ιδανική περίπτωση, η διαδικασία επαναφοράς πρέπει να είναι αυτοματοποιημένη και να διαρκεί το πολύ ένα λεπτό.

Συχνές ερωτήσεις

Ποια είναι η διαφορά μεταξύ git revert και git reset;

Revert δημιουργεί νέο commit που ακυρώνει τις αλλαγές και διατηρεί το ιστορικό. Το Reset μετακινεί τον δείκτη του κλάδου πίσω και μπορεί να διαγράψει commits. Για κοινόχρηστους κλάδους χρησιμοποιείτε μόνο revert.

Μπορώ να επαναφέρω δεδομένα μετά από git reset --hard;

Αν τα commits δεν έχουν συλλεγεί από τον garbage collector του Git, μπορούν να ανακτηθούν μέσω git reflog. Ωστόσο, μετά τον καθαρισμό η ανάκτηση καθίσταται αδύνατη. Χρησιμοποιείτε --hard μόνο σε τοπικούς κλάδους.

Πώς λειτουργεί το rollback σε μια συναλλαγή SQL;

Rollback ακυρώνει όλες τις αλλαγές που έγιναν στην τρέχουσα συναλλαγή, χρησιμοποιώντας το ημερολόγιο προειδοποιητικής εγγραφής (WAL). Το ΣΔΒΔ επαναφέρει τις αρχικές τιμές για όλες τις τροποποιημένες σελίδες δεδομένων.

Τι είναι το savepoint και σε τι χρησιμεύει;

Savepoint — ενδιάμεσο σημείο αποθήκευσης εντός μιας συναλλαγής. Επιτρέπει μερική επαναφορά σε αυτό χωρίς ακύρωση ολόκληρης της συναλλαγής. Χρήσιμο σε μεγάλες λειτουργίες με πολλά βήματα.

Πώς να αυτοματοποιήσω την επαναφορά σε CI/CD;

Ρυθμίστε health check και παρακολούθηση μετρήσεων μετά το deploy. Όταν ξεπεραστεί το όριο σφαλμάτων, ενεργοποιήστε αυτόματη επαναφορά μέσω script ή εργαλείου όπως Spinnaker, ArgoCD ή GitLab Auto Rollback.

Σύνοψη

  • Επαναφορά (rollback) — επιστροφή κώδικα, δεδομένων ή εφαρμογής σε προηγούμενη σταθερή έκδοση
  • Git revert — ασφαλής επαναφορά για ομαδική εργασία με διατήρηση ιστορικού
  • Git reset — καταστροφική επαναφορά, κατάλληλη μόνο για τοπικούς κλάδους
  • Rollback στη ΒΔ βασίζεται στο ημερολόγιο WAL και εγγυάται την ατομικότητα των συναλλαγών
  • Savepoint επιτρέπει μερική επαναφορά μεγάλης συναλλαγής
  • Blue-green και canary — στρατηγικές deploy με άμεση επαναφορά
  • Αυτοματοποιήστε την επαναφορά βάσει μετρήσεων για να ελαχιστοποιήσετε τον χρόνο αποκατάστασης

Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση

Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.

Συζήτηση έργου

Διαβάστε επίσης