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äd-igt>]gitreset(--patch|-p) [<trädlikt>] [--] [<sökvägsmönster>…]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ägsmönster>... -
gitreset[-q] [--pathspec-from-file=<fil> [--pathspec-file-nul]] [<träd-igt>] -
Dessa former återställer indexposterna för alla sökvägar som matchar <sökvägsmönster> till deras tillstånd vid <träd-igt>. (Det påverkar inte arbetsträdet eller den aktuella grenen.)
Det här betyder att
gitreset<sökvägsmönster> är motsatsen tillgitadd<sökvägsmönster>. Detta kommando motsvarargitrestore[--source=<träd-igt>]--staged<sökvägsmönster>....Efter att ha kört
gitreset<sökvägsmönster> 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äd-igt>] [--] [<sökvägsmönster>...] -
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 från 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ägsmönster-element separeras med LF eller CR/LF. Sökvägsmönster-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. 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. 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ä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 ber dig att hämta (pull), och ändringarna låter värda att sammanslås.
-
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)
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 arbetskatalogs-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 arbetskatalogen. Så om vi ser någon skillnad mellan indexet och målet och även mellan indexet och arbetskatalogen, 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 arbetskatalogen 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 arbetskatalogen 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 ḦEAD 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 ḦEAD 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