git reset
Ångra saker. Det här kommandot har tre lägen med väldigt olika konsekvenser — läs innan du kör.
Ångra staging (ofarligt)
git reset HEAD Kassan.cs # äldre syntaxgit restore --staged Kassan.cs # modern syntax, föredra den härTar bort filen från staging area. Ingenting i working directory påverkas — koden är kvar, den ingår bara inte i nästa commit längre.
Ångra commits — --soft (ofarligt)
git reset --soft HEAD~1Ångrar den senaste committen men behåller ändringarna stagade. Bra om du råkade committa för tidigt och vill lägga till mer.
HEAD~1 = en commit bakåt. HEAD~3 = tre commits bakåt.
flowchart LR
A[Commit C] -->|git reset --soft HEAD~1| B[Staging Area]
B --> C[Commit C igen, med mer]
style B fill:#f0f0f0,stroke:#888,color:#111
Ångra commits — --mixed (standard, försiktig)
git reset HEAD~1git reset --mixed HEAD~1 # samma sakÅngrar committen och unstagar ändringarna — men behåller koden i working directory. Du får bestämma vad som ska committas igen.
Ångra commits — --hard (destruktivt)
git reset --hard HEAD~1Ångrar committen och kastar bort alla ändringar. Koden är borta. Working directory återgår till tillståndet i föregående commit.
Kör inte --hard utan att vara säker på att du inte behöver koden. Och kör aldrig --hard på commits du redan pushat — då skriver du om historiken som andra bygger på.
Om du råkade köra --hard och vill ha tillbaka koden: titta på git reflog — det finns ofta en väg tillbaka.
Sammanfattning
| Flagga | Committen | Staging area | Working directory |
|---|---|---|---|
--soft | Ångras | Behålls (stagat) | Behålls |
--mixed | Ångras | Rensas | Behålls |
--hard | Ångras | Rensas | Rensas |