Ångra (Rollback) i utveckling: vad det är, sätt och hur det fungerar

Författare: IT Sectr Publicerad: 2026-07-30 Lästid: 7 min

“Å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 — återför kod eller data till tidigare stabil version
  • Git revert skapar en ny commit som gör ändringarna ogjorda — säkert sätt att ångra
  • Git reset flyttar grenpekaren bakåt och kan ta bort commithistorik
  • Rollback i databas avbryter en oavslutad transaktion och återställer data
  • Valet av ångringsmetod beror på om du arbetar ensam eller i ett team

Vad är ångra och rollback i utveckling

Å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 vs git reset: vad är skillnaden

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.

När ska revert användas

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.

bash
# Ångra senaste commit genom att skapa en ny commit
git revert HEAD

# Ångra en specifik commit via hash
git revert a1b2c3d

När ska reset användas

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.

bash
# Ångra senaste commit, behåll ändringar i arbetskatalogen
git reset HEAD~1

# Fullständig ångring — ändringar tas bort permanent
git reset --hard HEAD~2

Rollback i databaser: transaktioner och ACID

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.

sql
BEGIN TRANSACTION;

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

-- Rollback on error
ROLLBACK;

Savepoint: partiell ångring

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.

sql
SAVEPOINT sp1;

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

ROLLBACK TO sp1;

Ångra vid distribution: strategier och verktyg

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 deployment

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 release med automatisk ångring

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.

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

Praktiska exempel på ångring i utveckling

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.

Scenario 1: oavsiktlig commit i main

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.

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

Scenario 2: misslyckad databasmigrering

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.

Scenario 3: distribution med kritisk bugg

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

Vad är skillnaden mellan git revert och git reset?

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.

Kan data återställas efter git reset --hard?

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.

Hur fungerar rollback i en SQL-transaktion?

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.

Vad är en savepoint och vad används den till?

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.

Hur automatiserar man rollback i CI/CD?

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

  • Ångra (rollback) — återför kod, data eller applikation till tidigare stabil version
  • Git revert — säker ångring för teamarbete med bevarad historik
  • Git reset — destruktiv ångring, endast lämplig för lokala grenar
  • Rollback i databas baseras på WAL-loggen och garanterar transaktionsatomaritet
  • Savepoint möjliggör partiell ångring av en lång transaktion
  • Blue-green och canary — distributionsstrategier med omedelbar ångring
  • Automatisera ångring baserat på mätvärden för att minimera återställningstiden

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.

Diskutera projektet

Läs också