Git tilbyr flere måter å fortryde endringer på, avhengig av situasjonen — forkaste ucommittede endringer, fjerne fra staging, endre siste commit, reversere en commit, eller nullstille. Å kjenne det riktige verktøyet for hver situasjon er viktig og en verdifull praktisk ferdighet.
Fortryd ucommittede endringer (working directory)
git restore <file> # discard unstaged changes to a file (revert to last commit)
git checkout -- <file> # older equivalent
git restore . # discard ALL unstaged changes (careful!)
git clean -fd # remove untracked files/directories
Fjern fra staging (behold endringene, fjern bare fra staging)
git restore --staged <file> # unstage a file (changes stay in working dir)
git reset <file> # older equivalent
Rett eller endre siste commit
git commit --amend -m "New message" # change the last commit's message
git commit --amend # add staged changes to the last commit
# ⚠️ amend REWRITES the commit — don't amend commits already pushed/shared
Fortryd en commitet endring
TWO main approaches:
REVERT → creates a NEW commit that undoes a previous commit (SAFE for shared history)
git revert <commit> → history preserved; the undo is itself a commit
RESET → moves the branch pointer BACK (rewrites history — for LOCAL commits only)
git reset --soft HEAD~1 → undo commit, KEEP changes staged
git reset --mixed HEAD~1 → undo commit, keep changes unstaged (default)
git reset --hard HEAD~1 → undo commit AND DISCARD changes (⚠️ destructive!)
revert vs reset (det viktige valget)
REVERT → safe for PUBLIC/shared commits (adds a new undoing commit; doesn't rewrite history)
RESET → rewrites history (only for LOCAL, unpushed commits; never on shared branches)
→ Rule: use REVERT to undo commits others may have; RESET only for local cleanup.
Hvorfor det er viktig
Å vite hvordan man fortryder endringer i Git er viktig, en ofte brukt praktisk ferdighet, fordi feil og behovet for å fortryde arbeid er uunngåelig i utvikling, og Git tilbyr kraftige (men situasjonsspesifikke) måter å gjenopprette på.
Å forstå det riktige verktøyet for hver situasjon er nøkkelferdigheten: forkaste ucommittede endringer (git restore for å tilbakestille endringer i working directory, git clean for uspurte filer), fjerne fra staging (git restore --staged for å behold endringer men fjerne dem fra staging), endre siste commit (endre meldingen eller legge til den — med det viktige forbehold ikke å endre pushed commits siden det omskriver historikken), og fortryde commitet endringer.
For å fortryde commits er det å forstå den kritiske distinksjonen mellom revert og reset spesielt viktig: revert lager en ny commit som fortryder en tidligere og er trygt for delt/offentlig historikk (det omskriver ikke historikken, så det vil ikke forstyrre andre), mens reset flytter branch-pointeren tilbake og omskriver historikken, noe som gjør det hensiktsmessig kun for lokale, ikke-pushede commits (og reset --hard er destruktivt, forkaster endringer).
Regelen — bruk revert for commits andre kan ha, reset kun for lokal rydding — er vital fordi omskriving av delt historikk (via reset på pushede commits) forårsaker alvorlige problemer for samarbeidspartnere.
Å kjenne disse alternativene forhindrer både tap av arbeid (bruke destruktive kommandoer uforvarende) og forstyrrelse av samarbeid (omskriving av delt historikk).
Siden fortrydelse av endringer er et vanlig, uunngåelig behov og Git tilbyr flere situasjonsspesifikke tilnærminger med viktige sikkerhetsmessige implikasjoner (spesielt revert vs reset for delt historikk), å vite hvordan man fortryder endringer i Git — det riktige verktøyet for hvert scenario og den avgjørende revert-vs-reset-distinksjonen — er verdifull, hyppig brukt praktisk kunnskap for å arbeide trygt og sikkert med Git, en ferdighet som gjør angsten for feil til rutinemessig gjenoppretting mens man unngår den alvorlige fellen av å omskrive delt historikk.
