Setup and Config
Getting and Creating Projects
Basic Snapshotting
Branching and Merging
Sharing and Updating Projects
Inspection and Comparison
Patching
Debugging
External Systems
Server Admin
Guides
- gitattributes
- Command-line interface conventions
- Everyday Git
- Frequently Asked Questions (FAQ)
- Glossary
- Hooks
- gitignore
- gitmodules
- Revisions
- Submodules
- Tutorial
- Workflows
- All guides...
Administration
Plumbing Commands
-
2.54.0
2026-04-20
-
2.53.0
2026-02-02
-
2.52.0
2025-11-17
- 2.51.1 → 2.51.2 no changes
-
2.51.0
2025-08-18
- 2.50.1 no changes
-
2.50.0
2025-06-16
- 2.39.4 → 2.49.1 no changes
-
2.39.3
2023-04-17
- 2.36.1 → 2.39.2 no changes
-
2.36.0
2022-04-18
- 2.34.1 → 2.35.8 no changes
-
2.34.0
2021-11-15
- 2.27.1 → 2.33.8 no changes
-
2.27.0
2020-06-01
- 2.25.1 → 2.26.3 no changes
-
2.25.0
2020-01-13
- 2.23.1 → 2.24.4 no changes
-
2.23.0
2019-08-16
- 2.22.1 → 2.22.5 no changes
-
2.22.0
2019-06-07
- 2.21.1 → 2.21.4 no changes
-
2.21.0
2019-02-24
- 2.20.1 → 2.20.5 no changes
-
2.20.0
2018-12-09
- 2.15.4 → 2.19.6 no changes
-
2.14.6
2019-12-06
-
2.13.7
2018-05-22
-
2.12.5
2017-09-22
- 2.1.4 → 2.11.4 no changes
-
2.0.5
2014-12-17
SYNOPSIS
gitreset[-q] [<trädlikt>] [--] <sökvägsspec>…gitreset[-q] [--pathspec-from-file=<fil> [--pathspec-file-nul]] [<träd-igt>]gitreset(--patch|-p) [<trädlikt>] [--] [<sökvägsmönster>…]gitreset[--soft|--mixed[-N] |--hard|--merge|--keep] [-q] [<incheckning>]
BESKRIVNING
git reset gör något av följande:
-
gitreset[<mode>] <commit> changes which commitHEADpoints to. This makes it possible to undo various Git operations, for example commit, merge, rebase, and pull. -
When you specify files or directories or pass
--patch,gitresetupdates the staged version of the specified files.-
gitreset[<läge>] [<incheckning>] -
Set the current branch head (
HEAD) to point at <commit>. Depending on <mode>, also update the working directory and/or index to match the contents of <commit>. <commit> defaults toHEAD. Before the operation,ORIG_HEADis set to the tip of the current branch.<läge> måste vara ett av följande (standard
--mixed):-
--mixed -
Leave your working directory unchanged. Update the index to match the new
HEAD, so nothing will be staged.Om
-Nanges, markera borttagna sökvägar som avsiktliga att lägga till (se git-add[1]). -
--soft -
Leave your working tree files and the index unchanged. For example, if you have no staged changes, you can use git reset --soft HEAD~5; git commit to combine the last 5 commits into 1 commit. This works even with changes in the working tree, which are left untouched, but such usage can lead to confusion.
-
--hard -
Overwrite all files and directories with the version from <commit>, and may overwrite untracked files. Tracked files not in <commit> are removed so that the working tree matches <commit>. Update the index to match the new
HEAD, so nothing will be staged. -
--merge -
Återställ indexet och uppdatera filerna i arbetskatalogen som skiljer sig mellan <incheckning> och
HEAD, men behåll de som skiljer sig mellan indexet och arbetskatalogen (dvs. som har ändringar som inte har lagts till). Finns huvudsakligen för att återställa osammanfogade indexposter, som de som lämnas kvar avgitam-3ellergitswitch-mi vissa situationer. Om en fil som skiljer sig mellan <incheckning> och indexet har ändringar som inte har lagts till, avbryts återställningen. -
--keep -
Återställer indexposter och uppdaterar filer i arbetsträdet som skiljer sig mellan <incheckning> och
HEAD. Om en fil som skiljer sig mellan <incheckning> ochHEADhar lokala ändringar avbryts återställningen. -
--recurse-submodules -
--no-recurse-submodules -
När arbetsträdet uppdateras, kommer användning av
--recurse-submodulesockså rekursivt att återställa arbetsträdet för alla aktiva undermoduler enligt den incheckning som registrerats i superprojektet, och även ställa in undermodulernasHEADså att de kopplas från vid den incheckningen.
-
-
gitreset[-q] [<trädlikt>] [--] <sökvägsmönster>... -
gitreset[-q] [--pathspec-from-file=<fil> [--pathspec-file-nul]] [<trädlikt>] -
For all specified files or directories, set the staged version to the version from the given commit or tree (which defaults to
HEAD).This means that
gitreset<pathspec> is the opposite ofgitadd<pathspec>: it unstages all changes to the specified file(s) or directories. This is equivalent togitrestore--staged<pathspec>....In this mode,
gitresetupdates only the index (without updating theHEADor working tree files). If you want to update the files as well as the index entries, use git-restore[1]. -
gitreset(--patch|-p) [<trädlikt>] [--] [<sökvägsmönster>...] -
Interactively select changes from the difference between the index and the specified commit or tree (which defaults to
HEAD). The index is modified using the chosen changes.This means that
gitreset-pis the opposite ofgitadd-p, i.e. you can use it to selectively unstage changes. See the "Interactive Mode" section of git-add[1] to learn how to use the--patchoption.
-
Se "Nollställ, återställ och ångra" i git[1] för skillnaderna mellan de tre kommandona.
ALTERNATIV
-
-q -
--quiet -
Var tyst, rapportera endast fel.
-
--refresh -
--no-refresh -
Uppdatera indexet efter en blandad återställning. Aktiverat som standard.
-
--pathspec-from-file=<fil> -
Sökvägsmönster skickas i <fil> i stället för kommandoradsargument. Om <fil> är exakt
-används standardindata. Sökvägsmönster separeras med LF eller CR/LF. Sökvägsmönster kan citeras enligt beskrivningen för konfigurationsvariabelncore.quotePath(se git-config[1]). Se även--pathspec-file-nuloch globala--literal-pathspecs. -
--pathspec-file-nul -
Endast meningsfullt med
--pathspec-from-file. Sökvägsmönsterposter separeras med tecknet NUL och alla andra tecken tolkas bokstavligt (inklusive radbrytningar och citattecken). -
-U<n> -
--unified=<n> -
Generate diffs with <n> lines of context. The number of context lines defaults to
diff.contextor 3 if the configuration variable is unset. (-Uwithout <n> is silently accepted as a synonym for-pdue to a historical accident). -
--inter-hunk-context=<n> -
Visar sammanhanget mellan olika stycken, upp till det angivna <antal> rader, och sammanfogar därmed stycken som ligger nära varandra. Standardvärdet är
diff.interHunkContexteller 0 om konfigurationsalternativet inte är inställt.
-
-- -
Tolka inte fler argument som alternativ.
- <sökvägsmönster>...
-
Begränsar de sökvägar som påverkas av operationen.
För mer information, se posten sökvägsmönster i gitglossary[7].
EXEMPEL
- Ångra tillägg
-
$ edit (1) $ git add frotz.c filfre.c $ mailx (2) $ git reset (3) $ git pull git://info.example.com/ nitfol (4)
-
Du arbetar glatt med något och upptäcker att ändringarna i dessa filer är i god ordning. Du vill inte se dem när du kör
gitdiff, eftersom du planerar att arbeta med andra filer och ändringar med dessa filer är störande. -
Någon begär en hämtning ("pull"), och ändringarna verkar värda att sammanslås.
-
Indexet har dock redan smutsats ned (d.v.s. indexet matchar inte
HEAD-incheckningen). Men om det är känt att den pull som ska göras inte påverkarfrotz.cellerfilfre.c, återställs indexändringarna för dessa två filer. Ändringarna i arbetsträdet finns kvar där. -
Sedan kan hämtning och sammanslagning göras, och ändringarna i
frotz.cochfilfre.ckvar i arbetsträdet.
-
- Ångra en incheckning och gör om
-
$ git commit ... $ git reset --soft HEAD^ (1) $ edit (2) $ git commit -a -c ORIG_HEAD (3)
-
Det görs oftast när det visar sig att det som just checkades in är ofullständigt, eller att incheckningsmeddelandet stavades fel, eller båda. Lämnar arbetsträdet som det var före "återställning".
-
Gör korrigeringar till arbetsträds-filer.
-
"reset" kopierar den gamla huvudet till
.git/ORIG_HEAD; gör om incheckningen genom att börja med dess loggmeddelande. Om du inte behöver redigera meddelandet ytterligare kan du ge alternativet-Ci stället.Se även alternativet
--amendtill git-commit[1].
-
- Ångra en incheckning, vilket gör den till en ämnesgren
-
$ git branch topic/wip (1) $ git reset --hard HEAD~3 (2) $ git switch topic/wip (3)
-
Du har gjort några incheckningar, men inser att det var för tidigt att lägga dem i
master-grenen. Du vill fortsätta finslipa dem i en ämnes-gren, så skapa entopic/wip-gren från den nuvarandeHEAD. -
Spola tillbaka master-grenen för att bli av med de tre incheckningarna.
-
Byt till grenen
topic/wipoch fortsätt arbeta.
-
- Ångra incheckningar permanent
-
$ git commit ... $ git reset --hard HEAD~3 (1)
-
De tre senaste incheckningarna (
HEAD,HEAD^ochHEAD~2) var dåliga och du vill inte se dem igen. Gör inte detta om du redan har gett dessa incheckningar till någon annan. (Se avsnittet "ÅTERSTÄLLA FRÅN UPSTRÖMSREBASE" i git-rebase[1] för konsekvenserna av att göra det.)
-
- Ångra en sammanslagning eller pull
-
$ git pull (1) Auto-merging nitfol CONFLICT (content): Merge conflict in nitfol Automatic merge failed; fix conflicts and then commit the result. $ git reset --hard (2) $ git pull . topic/branch (3) Updating from 41223... to 13134... Fast-forward $ git reset --hard ORIG_HEAD (4)
-
Att försöka uppdatera uppströms resulterade i många konflikter; du var inte redo att lägga ner mycket tid på att sammanslå just nu, så du bestämmer dig för att göra det senare.
-
"pull" har inte gjort sammanslagningsincheckning, så
gitreset--hardsom är en synonym förgitreset--hardHEADrensar bort röran från indexfilen och arbetsträdet. -
Sammanfoga en ämnesgren med den aktuella grenen, vilket resulterade i en snabbspolning.
-
Men det står klart att ämnesgrenen ännu inte är redo för offentlig konsumtion än. "pull" eller "merge" lämnar alltid den ursprungliga toppen på den aktuella grenen i
ORIG_HEAD, så att återställa den hårt till den återställer indexfilen och arbetsträdet till det tillståndet, och återställer grenens toppen till den incheckningen.
-
- Ångra en sammanslagning eller pull inuti ett smutsig arbetsträd
-
$ git pull (1) Auto-merging nitfol Merge made by recursive. nitfol | 20 +++++---- ... $ git reset --merge ORIG_HEAD (2)
-
Även om det kan finnas lokala modifieringar i arbetsträdet, går det tryggt att köra "git pull" när det är känt att ändringen i den andra grenen inte överlappar dem.
-
Efter att ha granskat resultatet av sammanslagningen, kan du upptäcka att ändringen i den andra grenen är otillfredsställande. Om du kör
gitreset--hardORIG_HEADgår du tillbaka till var du var, men det kommer att ignorera dina lokala ändringar, vilket du inte vill ha.gitreset--mergebehåller dina lokala ändringar.
-
- Avbrutet arbetsflöde
-
Anta att arbetet med en stor ändring avbryts av en brådskande förfrågan om en snabb åtgärd. Filerna i arbetsträdet är ännu inte i skick att checkas in, men det finns behov av att gå till en annan gren för en snabb programfelsrättning.
$ git switch feature ;# du arbetade i "funktions"-grenen och $ work work work ;# blev avbruten $ git commit -a -m "ögonblicksbild WIP" (1) $ git switch master $ fix fix fix $ git commit ;# commit med riktig logg $ git switch feature $ git reset --soft HEAD^ ;# gå tillbaka till WIP-tillstånd (2) $ git reset (3)
-
Denna incheckning kommer att bli bortblåst så ett meddelande om bortkastad logg är okej.
-
Det tar bort WIP-incheckningen från incheckningshistoriken och ställer in arbetsträdet till tillståndet precis innan ögonblicksbilden skapades.
-
Vid det här laget innehåller indexfilen fortfarande alla WIP-ändringar som du har checkat in som en "ögonblicksbild WIP". Detta uppdaterar indexet så att dina WIP-filer visas som obehandlade.
Se även git-stash[1].
-
- Återställ en enskild fil i indexet
-
Anta att du har lagt till en fil i ditt index, men senare bestämmer dig för att du inte vill lägga till den i din incheckning. Du kan ta bort filen från indexet samtidigt som du behåller dina ändringar med git reset.
$ git reset -- frotz.c (1) $ git commit -m "Checka in filer i index" (2) $ git add frotz.c (3)
-
Det tar bort filen från indexet medan den behålls i arbetskatalogen.
-
Detta checkar in alla andra ändringar i indexet.
-
Lägger till filen i indexet igen.
-
- Behåll ändringar i arbetsträdet medan några tidigare incheckningar kastas bort
-
Anta att arbete pågår med något som checkas in, och att arbetet därefter fortsätter en stund till, men att det som finns i arbetsträdet i stället borde ligga på en annan gren som inte har något att göra med det som tidigare checkades in. Då går det att starta en ny gren och återställa den samtidigt som ändringarna i arbetsträdet behålls.
$ git tag start $ git switch -c branch1 $ edit $ git commit ... (1) $ edit $ git switch -c branch2 (2) $ git reset --keep start (3)
-
Det checkar in de första redigeringarna i
branch1. -
I den ideala världen hade det kunnat stå klart att den tidigare incheckningen inte hörde hemma i det nya ämnet när
branch2skapades och växlades till (d.v.s.gitswitch-cbranch2start), men ingen är perfekt. -
Men du kan använda
reset--keepför att ta bort den oönskade incheckningen efter att du har bytt tillbranch2.
-
- Dela upp en incheckning i en sekvens av incheckningar
-
Anta att många logiskt separata ändringar har skapats och checkats in tillsammans. Senare kan det visa sig vara bättre att ha varje logisk bit associerad med sin egen incheckning. Då kan git reset användas för att spola tillbaka historiken utan att ändra innehållet i de lokala filerna, och sedan kan
gitadd-panvändas successivt för att interaktivt välja vilka stycken som ska inkluderas i varje incheckning, med hjälp avgitcommit-cför att förfylla incheckningsmeddelandet.$ git reset -N HEAD^ (1) $ git add -p (2) $ git diff --cached (3) $ git commit -c HEAD@{1} (4) ... (5) $ git add ... (6) $ git diff --cached (7) $ git commit ... (8)-
Först, återställ historiken bakåt en incheckning så att vi tar bort den ursprungliga incheckningen, men lämnar arbetsträdet med alla ändringar.
-Nsäkerställer att alla nya filer som läggs till medHEADfortfarande är markerade så attgitadd-phittar dem. -
Därefter väljer vi interaktivt diff-stycken att lägga till med hjälp av funktionen
gitadd-p. Detta kommer att fråga dig om varje diff-stycke i sekvens och du kan använda enkla kommandon som "ja, inkludera detta", "Nej, inkludera inte detta" eller till och med den mycket kraftfulla funktionen "redigera". -
När du är nöjd med de ändringar du vill inkludera, bör du verifiera vad som har förberetts för den första incheckningen genom att använda
gitdiff--cached. Detta visar alla ändringar som har flyttats till indexet och som snart kommer att checkas in. -
Sedan checkas ändringarna som lagras i indexet in. Alternativet
-canger att incheckningsmeddelandet ska förfyllas med det ursprungliga meddelandet från den första incheckningen. Det är praktiskt för att slippa skriva om det.HEAD@{1}är en särskild notation för den incheckning somHEADpekade på före den ursprungliga återställningsincheckningen (för 1 ändring sedan). Se git-reflog[1] för mer information. Det går också att använda vilken annan giltig incheckningsreferens som helst. -
Du kan upprepa steg 2–4 flera gånger för att dela upp originalkoden i valfritt antal incheckningar.
-
Nu har du delat upp många av ändringarna i egna incheckningar, och kanske inte längre använder patch-läget för
gitaddför att välja alla återstående oincheckade ändringar. -
Kontrollera återigen att du har inkluderat det du vill. Du kan också kontrollera att git diff inte visar några återstående ändringar som ska checkas in senare.
-
Och slutligen skapa den slutliga incheckningen.
-
DISKUSSION
Tabellerna nedan visar vad som händer vid körning:
git reset --option target
att återställa HEAD till en annan incheckning (target) med olika återställningsalternativ beroende på filernas tillstånd.
I dessa tabeller är A, B, C och D några olika tillstånd för en fil. Till exempel betyder den första raden i den första tabellen att om en fil är i tillstånd A i arbetsträdet, i tillstånd B i indexet, i tillstånd C i HEAD och i tillstånd D i målet, så kommer git reset --soft target att lämna filen i arbetsträdet i tillstånd A och i indexet i tillstånd B. Den återställer (d.v.s. flyttar) HEAD (d.v.s. spetsen på den aktuella grenen, om HEAD pekar på en gren) till target (som har filen i tillstånd D).
arbetande index HEAD target arbetande index HEAD ---------------------------------------------------- A B C D --soft A B D --mixed A D D --hard D D D --merge (otillåten) --keep (otillåten)
arbetande index HEAD target arbetande index HEAD ---------------------------------------------------- A B C C --soft A B C --mixed A C C --hard C C C --merge (otillåten) --keep A C C
arbetande index HEAD target arbetande index HEAD ---------------------------------------------------- B B C D --soft B B D --mixed B D D --hard D D D --merge D D D --keep (otillåten)
arbetande index HEAD target arbetande index HEAD ---------------------------------------------------- B B C C --soft B B C --mixed B C C --hard C C C --merge C C C --keep B C C
arbetande index HEAD target arbetande index HEAD ---------------------------------------------------- B C C D --soft B C D --mixed B D D --hard D D D --merge (otillåten) --keep (otillåten)
arbetsindex HUVUD mål arbetsindex HUVUD ---------------------------------------------------- B C C C --soft B C C --mixed B C C --hard C C C --merge B C C --keep B C C
git reset --merge är avsedd att användas vid återställning från en konfliktfylld sammanslagning. Varje sammanslagningsoperation garanterar att arbetsträds-filen som är involverad i sammanslagningen inte har en lokal förändring med avseende på indexet innan den startar, och att den skriver resultatet ut till arbetsträdet. Så om vi ser någon skillnad mellan indexet och målet och även mellan indexet och arbetsträdet, betyder det att vi inte återställer från ett tillstånd som en sammanslagningsoperation lämnade efter att ha misslyckats med en konflikt. Det är därför vi inte tillåter alternativet --merge i det här fallet.
git reset --keep är avsedd att användas när man tar bort några av de senaste incheckningarna i den aktuella grenen samtidigt som ändringarna behålls i arbetsträdet. Om det kan finnas konflikter mellan ändringarna i incheckningen vi vill ta bort och ändringarna i arbetsträdet vi vill behålla, är återställningen inte tillåten. Det är därför den inte är tillåten om det finns både ändringar mellan arbetsträdet och HEAD, och mellan HEAD och målet. För säkerhets skull är den inte heller tillåten när det finns poster som inte har sammanslagits.
Följande tabeller visar vad som händer när det finns osammanslagna poster:
arbetsindex HEAD mål arbetsindex HEAD ---------------------------------------------------- X U A B --soft (disallowed) --mixed X B B --hard B B B --merge B B B --keep (disallowed)
arbetsindex HEAD mål arbetsindex HEAD ---------------------------------------------------- X U A A --soft (disallowed) --mixed X A A --hard A A A --merge A A A --keep (disallowed)
X betyder valfritt tillstånd och U betyder ett osammanslaget index.
GIT
En del av git[1]-sviten