“Ångra” och “rollback” — termer som innebär att system, kod eller data återförs till ett tidigare tillstånd. Inom utveckling är detta en grundläggande operation inbyggd i versionshanteringssystem, databaser och distributionsmekanismer. Enligt Git Documentation kan ångringsoperationer vara säkra (revert med skapande av ny commit) och destruktiva (reset med förlorad historik). Att förstå skillnaderna mellan dem hjälper till att undvika dataförlust vid återgång till tidigare version.
Huvudsakligt
Ångra (rollback) — operationen att återföra systemet till ett tidigare stabilt tillstånd. I utvecklingssammanhang kan detta innebära att ångra en commit i Git, återkalla en transaktion i en databas eller återställa en tidigare version av applikationen på servern. Termen kommer från engelskans “rollback” och har starkt etablerat sig i ordförrådet hos utvecklare på alla plattformar.
Behovet av ångring uppstår när en ny ändring förstör funktionalitet, orsakar fel eller inte klarar kvalitetskontrollen. I en välorganiserad utvecklingsprocess är ångring inte ett tecken på misslyckande, utan en standardprocedur inbyggd i arbetsflödet. Ju snabbare teamet kan ångra en problematisk ändring, desto mindre påverkan har buggen på användarna.
Olika verktyg erbjuder olika ångringsmekanismer: Git ger valet mellan säker revert och destruktiv reset, databaser stödjer transaktionsrollback, och CI/CD-system kan växla trafik mellan versioner. Valet av tillvägagångssätt beror på sammanhanget och kraven på att bevara ändringshistorik.
Git revert — ett säkert sätt att ångra som skapar en ny commit som gör ändringarna från den tidigare ogjorda. Historiken förblir linjär, alla gamla commits bevaras. Detta är det enda korrekta valet för ångring i en gemensam gren där flera utvecklare arbetar. Kommandot git revert tar inte bort historik — det lägger till faktumet av ångring som en ny ändring.
Git reset flyttar pekaren för den aktuella grenen till en angiven commit och förkastar alla efterföljande ändringar. Beroende på flaggan — soft, mixed eller hard — hanterar reset arbetskatalogen och indexet olika. Hard-läget tar helt bort ändringar från historiken, vilket gör det farligt för gemensamma grenar och endast lämpligt för lokalt arbete.
Revert tillämpas i delade grenar: main, develop, release. Det bevarar historiken och gör det möjligt för andra utvecklare att förstå att en ändring har ångrats. Efter revert kan git pull göras säkert — systemet kommer inte att generera konflikter relaterade till omskriven historik. I lagarbete är revert standarden.
# Ångra senaste commit genom att skapa en ny commit
git revert HEAD
# Ångra en specifik commit via hash
git revert a1b2c3d
Reset är lämpligt i en lokal gren där du ännu inte har publicerat ändringarna. Om du har experimenterat och vill rensa historiken helt — reset hard gör det. I en lokal gren kan du använda reset mixed för att ångra commits men behålla ändringarna i arbetskatalogen för omcommit.
# Ångra senaste commit, behåll ändringar i arbetskatalogen
git reset HEAD~1
# Fullständig ångring — ändringar tas bort permanent
git reset --hard HEAD~2
Transaktionsrollback — operationen som gör alla ändringar inom den aktuella transaktionen ogjorda och återför databasen till tillståndet vid dess början. Detta garanterar atomaritet — en av de fyra principerna i ACID (Atomicity, Consistency, Isolation, Durability). Om ett fel uppstår i någon fas av transaktionen utförs rollback och data återgår till ursprunglig position.
Rollback-mekanismen implementeras genom write-ahead log (WAL). Innan en datasida ändras skriver DBMS det gamla och nya värdet i loggen. Vid rollback läser systemet loggen och återställer de ursprungliga värdena för alla ändrade sidor. Detta garanterar att även vid strömavbrott kan transaktionen korrekt ångras.
BEGIN TRANSACTION;
UPDATE accounts
SET balance = balance - 100
WHERE id = 1;
-- Rollback on error
ROLLBACK;
I långa transaktioner är det bekvämt att använda savepoint — mellanliggande sparingspunkter som du kan återgå till utan att avsluta hela transaktionen. Detta gör det möjligt att hantera fel inom en komplex operation utan att förlora framsteg i andra delar av den. Savepoint stöds av de flesta relationsdatabashanterare: PostgreSQL, MySQL, Oracle.
SAVEPOINT sp1;
UPDATE orders SET status = 'cancelled'
WHERE id = 42;
ROLLBACK TO sp1;
Distributionsångring — att återföra en fungerande applikation till tidigare version efter en misslyckad distribution. Detta är en kritisk funktion för produktionsmiljön: återställningstiden (MTTR) påverkar direkt SLA och användarupplevelse. Moderna plattformar erbjuder flera ångringsstrategier beroende på arkitektur och tillgänglighetskrav.
Blue-green — en strategi där två identiska miljöer arbetar samtidigt: blue (nuvarande version) och green (ny version). Trafik växlas till green efter en lyckad distribution. Om den nya versionen fungerar felaktigt återgår trafikomkopplaren till blue. Ångring sker omedelbart, utan omdistribution — det räcker att ändra routing.
Canary deployment leder en liten del av trafiken till den nya versionen och övervakar mätvärden: antal fel, svarstid, procentandel lyckade förfrågningar. Om mätvärdena försämras, ångrar systemet automatiskt canaryn och leder all trafik till den stabila versionen. Kubernetes och service mesh (Istio, Linkerd) stödjer denna strategi direkt.
apiVersion: apps/v1
kind: Deployment
spec:
replicas: 10
strategy:
rollingUpdate:
maxUnavailable: 1
maxSurge: 1
Låt oss betrakta tre typiska scenarier där en utvecklare måste ångra ändringar. Varje scenario kräver sin egen approach — från ett enkelt kommando i terminalen till en flerstegsprocedur med CI/CD-deltagande.
Du har av misstag pushat en commit med en bugg till main. Din uppgift är att ångra ändringarna utan att förlora historik för teamet. Använd git revert för att skapa en ångrande commit och sedan git push. Alla teammedlemmar kommer att se faktumet av ångring och kan fortsätta arbetet utan konflikter. Detta är den säkraste och mest transparenta metoden.
git checkout main
git pull origin main
git revert HEAD
git push origin main
Databasmigreringen slutade med fel och en del data skadades. Använd transaktionsrollback i migreringsskriptet och återställning från backup för redan tillämpade ändringar. I ett väldesignat system är varje migrering inslagen i en transaktion — vid fel utför DBMS automatiskt rollback.
Efter distribution av den nya versionen upptäckte du att autentisering inte fungerar. Om du använder blue-green är ångring att växla routern tillbaka. Om rolling update — kommandot kubectl rollout undo återställer den tidigare versionen. Helst bör ångringsprocessen vara automatiserad och inte ta längre tid än en minut.
Vanliga frågor
Revert skapar en ny commit som gör ändringarna ogjorda och bevarar historiken. Reset flyttar grenpekaren bakåt och kan ta bort commits. För gemensamma grenar, använd endast revert.
Om commits inte har samlats in av Gits sopinsamlare kan de återställas via git reflog. Men efter rensning blir återställning omöjlig. Använd --hard endast i lokala grenar.
Rollback gör alla ändringar i den aktuella transaktionen ogjorda med hjälp av write-ahead log (WAL). DBMS återställer de ursprungliga värdena för alla ändrade datasidor.
Savepoint — en mellanliggande sparingspunkt inom en transaktion. Möjliggör partiell återgång till den utan att ångra hela transaktionen. Användbar i långa operationer med flera steg.
Konfigurera health check och övervakning av mätvärden efter distribution. När feltröskeln överskrids, starta automatisk ångring via ett skript eller verktyg som Spinnaker, ArgoCD eller GitLab Auto Rollback.
Sammanfattning
Vi utvecklar en mobil applikation nyckelfärdigt
IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.
Läs också