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.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ädlikt>]gitreset(--patch|-p) [<trädlikt>] [--] [<sökvägsspec>…]gitreset[--soft|--mixed[-N] |--hard|--merge|--keep] [-q] [<incheckning>]
BESKRIVNING
I de tre första formerna, kopiera poster från <trädlikt> till indexet. I det sista formuläret, sätt den aktuella grenhuvudet (HEAD) till <incheckning>, och modifiera eventuellt index och arbetsträd så att de matchar. <trädlikt>/<incheckning> har som standard HEAD i alla formulär.
-
gitreset[-q] [<trädlikt>] [--] <sökvägar>... -
gitreset[-q] [--pathspec-from-file=<file> [--pathspec-file-nul]] [<tträdlikt>] -
Dessa former återställer indexposterna för alla sökvägar som matchar <sökvägsspec> till deras tillstånd vid <trädlikt>. (Det påverkar inte arbetsträdet eller den aktuella grenen.)
Det här betyder att
gitreset<sökvägsspec> är motsatsen tillgitadd<sökvägsspec>. Detta kommando motsvarargitrestore[--source=<trädlikt>]--staged<sökvägsspec>....Efter att ha kört
gitreset<sökvägsspec> för att uppdatera indexposten kan du använda git-restore[1] för att checka ut innehållet från indexet till arbetskatalog. Alternativt, genom att använda git-restore[1] och ange en incheckning med--source, kan du kopiera innehållet i en sökväg från en incheckning till indexet och till arbetsträdet samtidigt. -
gitreset(--patch|-p) [<trädlikt>] [--] [<sökvägsspec>...] -
Välj interaktivt bitar i skillnaden mellan indexet och <trädlikt> (standardinställningen är
HEAD). De valda bitarna tillämpas i omvänd ordning på indexet.Det här betyder att
gitreset-pär motsatsen tillgitadd-p, d.v.s. du kan använda det för att selektivt återställa stycken. Se avsnittet "Interaktivt läge" i git-add[1] för att lära dig hur man använder--patch-läget. -
gitreset[<läge>] [<incheckning>] -
Det här formuläret återställer den aktuella grenhuvudet till <incheckning> och uppdaterar eventuellt indexet (återställer det till trädet för <incheckning>) och arbetskatalog beroende på <läge>. Före operationen sätts
ORIG_HEADtill toppen av den aktuella grenen. Om <mode> utelämnas, sätts standardvärdet till--mixed. <läge> måste vara ett av följande:-
--soft -
Rör inte indexfilen eller arbetsträdet alls (men återställer huvudet till <incheckning>, precis som alla lägen gör). Detta lämnar alla dina ändrade filer kvar som "Ändringar att checkas-in", som
gitstatusskulle uttrycka det. -
--mixed -
Återställer indexet men inte arbetskatalog (dvs. de ändrade filerna bevaras men markeras inte för incheckning) och rapporterar vad som inte har uppdaterats. Detta är standardåtgärden.
Om
-Nanges markeras borttagna sökvägar som avsiktliga att lägga till (se git-add[1]). -
--hard -
Återställer indexet och arbetskatalog. Alla ändringar av spårade filer i arbetskatalog sedan <incheckning> ignoreras. Alla ospårade filer eller kataloger som används vid skrivning av spårade filer raderas helt enkelt.
-
--merge -
Återställer indexet och uppdaterar filerna i arbetskatalogen som skiljer sig mellan <incheckning> och
HEAD, men behåller de som skiljer sig mellan indexet och arbetskatalogen (dvs. som har ändringar som inte har lagts till). Om en fil som skiljer sig mellan <incheckning> och indexet har ändringar som inte har lagts till, avbryts återställningen.Med andra ord,
--mergegör något i stil medgitread-tree-u-m<incheckning>, men överför osammanfogade indexposter. -
--keep -
Återställer indexposter och uppdaterar filer i arbetskatalogen 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 arbetskatalogen uppdateras, kommer användning av
--recurse-submodulesockså rekursivt att återställa arbetskatalogen för alla aktiva undermoduler enligt den incheckning som registrerats i superprojektet, och även ställa in undermodulernasHEADså att de kopplas bort vid den incheckningen.
-
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ägsspec skickas i <fil> istället för kommandoradsargument. Om <fil> är exakt
-används standardindata. Sökvägsspec-element separeras med LF eller CR/LF. Sökvägsspec-element kan citeras enligt beskrivningen för konfigurationsvariabelncore.quotePath(se git-config[1]). Se även--pathspec-file-nuloch global--literal-pathspecs. -
--pathspec-file-nul -
Endast meningsfullt med
--pathspec-from-file. Pathspec-element 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. Defaults to
diff.contextor 3 if the config option is unset. -
--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ägsspec>...
-
Begränsar de sökvägar som påverkas av operationen.
För mer information, se posten sökvägsspec 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. -
Somebody asks you to pull, and the changes sound worthy of merging.
-
Du har dock redan smutsat ner indexet (dvs. ditt index matchar inte
HEAD-incheckningen). Men du vet att den pull du ska göra inte påverkarfrotz.cellerfilfre.c, så du återställer indexändringarna för dessa två filer. Dina ändringar i arbetskatalog finns kvar där. -
Sedan kan du hämta och sammanfoga, och lämna ändringarna av
frotz.cochfilfre.ckvar i arbetskatalogen.
-
- Ångra en incheckning och gör om
-
$ git commit ... $ git reset --soft HEAD^ (1) $ edit (2) $ git commit -a -c ORIG_HEAD (3)
-
Detta görs oftast när du kommer ihåg att det du just checkade-in är ofullständigt, eller att du stavade ditt inchecknings-meddelande fel, eller båda. Lämnar arbetskatalogen som det var före "återställning".
-
Gör korrigeringar till arbetskatalogs-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-Cistä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 sammanslagnings-incheckning, så
gitreset--hardsom är en synonym förgitreset--hardHEADrensar bort röran från indexfilen och arbetskatalogen. -
Sammanfoga en ämnesgren med den aktuella grenen, vilket resulterade i en snabbspolning framåt.
-
Men du har bestämt dig för att ämnesgrenen 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 din indexfil och arbetskatalogen till det tillståndet, och återställer grenens toppen till den incheckningen.
-
- Ångra en sammanslagning eller pull inuti ett smutsig arbetskatalog
-
$ git pull (1) Auto-merging nitfol Merge made by recursive. nitfol | 20 +++++---- ... $ git reset --merge ORIG_HEAD (2)
-
Även om du kan ha lokala modifieringar i ditt arbetskatalog, kan du tryggt säga "git pull" när du vet 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 du blir avbruten av en brådskande åtgärdsförfrågan medan du håller på med en stor ändring. Filerna i ditt arbetsträd är ännu inte i form för att komma åt, men du behöver gå till den andra grenen för en snabb buggfix.
$ 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.
-
Detta tar bort WIP-incheckningen från inchecknings-historiken och ställer in ditt arbetskatalog till tillståndet precis innan du skapade den ögonblicksbilden.
-
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)
-
Detta 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 arbetskatalogen medan du kasta bort några tidigare incheckningar
-
Anta att du arbetar med något och du checkar-in det, och sedan fortsätter du att arbeta lite mer, men nu tror du att det du har i din arbetskatalog borde finnas i en annan gren som inte har något att göra med det du checkade-in tidigare. Du kan starta en ny gren och återställa den samtidigt som du behåller ändringarna i din arbetskatalog.
$ git tag start $ git switch -c branch1 $ edit $ git commit ... (1) $ edit $ git switch -c branch2 (2) $ git reset --keep start (3)
-
Detta checkar-in dina första redigeringar i
branch1. -
I den ideala världen hade du kunnat inse att den tidigare incheckningen inte hörde hemma i det nya ämnet när du skapade och bytte till
branch2(dvs.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 du har skapat många logiskt separata ändringar och checkat-in dem tillsammans. Senare bestämmer du dig för att det kan vara bättre att ha varje logisk bit associerad med sin egen incheckning. Du kan använda git reset för att spola tillbaka historiken utan att ändra innehållet i dina lokala filer, och sedan successivt använda
gitadd-pför att interaktivt välja vilka stycken som ska inkluderas i varje incheckning, med hjälp avgitcommit-cför att förfylla inchecknings-meddelandet.$ 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 arbetskatalogen 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, checka-in ändringarna som lagras i indexet. Alternativet
-canger att inchecknings-meddelandet ska förfyllas från det ursprungliga meddelandet som du började med i den första incheckningen. Detta är praktiskt för att undvika att skriva om det.HEAD@{1}är en speciell notation för den incheckning somHEADbrukade vara vid före den ursprungliga återställnings-incheckningen (för 1 ändring sedan). Se git-reflog[1] för mer information. Du kan också använda vilken annan giltig inchecknings-referens 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 arbetskatalogen, 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 arbetskatalogen i tillstånd A och i indexet i tillstånd B. Den återställer (dvs. flyttar) HEAD (dvs. spetsen på den aktuella grenen, om du är på en) 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)
working index HEAD target working index HEAD ---------------------------------------------------- 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 is meant to be used when resetting out of a conflicted merge. Any mergy operation guarantees that the working tree file that is involved in the merge does not have a local change with respect to the index before it starts, and that it writes the result out to the working tree. So if we see some difference between the index and the target and also between the index and the working tree, then it means that we are not resetting out from a state that a mergy operation left after failing with a conflict. That is why we disallow --merge option in this case.
git reset --keep is meant to be used when removing some of the last commits in the current branch while keeping changes in the working tree. If there could be conflicts between the changes in the commit we want to remove and the changes in the working tree we want to keep, the reset is disallowed. That’s why it is disallowed if there are both changes between the working tree and HEAD, and between HEAD and the target. To be safe, it is also disallowed when there are unmerged entries.
The following tables show what happens when there are unmerged entries:
working index HEAD target working index HEAD ---------------------------------------------------- X U A B --soft (disallowed) --mixed X B B --hard B B B --merge B B B --keep (disallowed)
working index HEAD target working index HEAD ---------------------------------------------------- X U A A --soft (disallowed) --mixed X A A --hard A A A --merge A A A --keep (disallowed)
X means any state and U means an unmerged index.
GIT
En del av git[1]-sviten