Svenska ▾ Topics ▾ Latest version ▾ git-rm last updated in 2.50.0

NAMN

git-rm - Ta bort filer från arbetsträdet och från indexet

SYNOPSIS

git rm [-f | --force] [-n] [-r] [--cached] [--ignore-unmatch]
       [--quiet] [--pathspec-from-file=<fil> [--pathspec-file-nul]]
       [--] [<sökvägsmönster>…​]

BESKRIVNING

Ta bort filer som matchar sökvägsmönstret från indexet, eller från arbetsträdet och indexet. git rm tar inte bort en fil enbart från arbetskatalogen. (Det finns inget alternativ för att ta bort en fil endast från arbetsträdet och ändå behålla den i indexet; använd /bin/rm om du vill göra det.) Filerna som tas bort måste vara identiska med grenens topp, och inga uppdateringar av deras innehåll får vara köade i indexet, även om standardbeteendet kan åsidosättas med alternativet -f. När --cached anges måste det köade innehållet matcha antingen grenens topp eller filen på disken, vilket gör att filen kan tas bort enbart från indexet. När sparse-checkout används (se git-sparse-checkout[1]) tar git rm bara bort sökvägar inom sparse-checkout-mönstren.

ALTERNATIV

<sökvägsmönster>...

Filer att ta bort. Ett inledande katalognamn (t.ex. kat för att ta bort kat/fil1 och kat/fil2) kan anges för att ta bort alla filer i katalogen, och rekursivt alla underkataloger, men detta kräver att alternativet -r anges explicit.

Kommandot tar bara bort de sökvägar som är kända för Git.

Filglobbing matchar över kataloggränser. Givet två kataloger d och d2 är det alltså skillnad mellan att använda git rm d*' och git rm d/*', eftersom den förra också tar bort hela katalogen d2.

För mer information, se <sökvägsmönster>-posten i gitglossary[7].

-f
--force

Åsidosätt den àjour-kontrollen.

-n
--dry-run

Ta inte bort några filer. I stället visas bara om de finns i indexet och annars skulle tas bort av kommandot.

-r

Tillåt rekursiv borttagning när ett inledande katalognamn anges.

--

Det här alternativet kan användas för att separera kommandoradsalternativ från fillistan (användbart när filnamn kan misstas för kommandoradsalternativ).

--cached

Använd det här alternativet för att avköa och endast ta bort sökvägar från indexet. Arbetskatalogs-filer, oavsett om de är ändrade eller inte, kommer att lämnas orörda.

--ignore-unmatch

Avsluta med nollstatus även om inga filer matchades.

--sparse

Allow updating index entries outside of the sparse-checkout cone. Normally, git rm refuses to update index entries whose paths do not fit within the sparse-checkout cone. See git-sparse-checkout[1] for more.

-q
--quiet

git rm matar normalt ut en rad (i form av ett rm-kommando) för varje fil som tas bort. Det här alternativet undertrycker den utmatningen.

--pathspec-from-file=<fil>

Sökvägsmönster skickas i <fil> i stället för argument. Om <fil> är exakt - används standardindata. Sökvägsmönsterposter separeras med LF eller CR/LF. Sökvägsmönsterposter kan citeras enligt beskrivningen för konfigurationsvariabeln core.quotePath (se git-config[1]). Se även --pathspec-file-nul och 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).

TA BORT FILER SOM HAR FÖRSVUNNIT FRÅN FILSYSTEMET

Det finns inget alternativ för git rm att ta bort från indexet endast de sökvägar som har försvunnit från filsystemet. Beroende på användningsfallet finns det dock flera sätt att göra detta.

Använda “git commit -a”

Om du vill att din nästa incheckning ska registrera alla ändringar i spårade filer i arbetsträdet och alla borttagningar av filer som har tagits bort från arbetsträdet med rm (i motsats till git rm), använd git commit -a, eftersom det automatiskt upptäcker och registrerar alla borttagningar. Du kan också få en liknande effekt utan att checka in genom att använda git add -u.

Använder “git add -A”

When accepting a new code drop for a vendor branch, you probably want to record both the removal of paths and additions of new paths as well as modifications of existing paths.

Vanligtvis tar du först bort alla spårade filer från arbetsträdet med hjälp av det här kommandot:

git ls-files -z | xargs -0 rm -f

och sedan packar upp den nya koden i arbetsträdet. Alternativt kan du rsync ändringarna i arbetsträdet.

Efter det är det enklaste sättet att registrera alla borttagningar, tillägg och ändringar i arbetsträdet:

git add -A

Andra sätt

Om allt du egentligen vill göra är att ta bort filer från indexet som inte längre finns i arbetsträdet (kanske för att ditt arbetsträd är smutsigt och du därför inte kan använda git commit -a), använd följande kommando:

git diff --name-only --diff-filter=D -z | xargs -0 git rm --cached

UNDERMODULER

Endast undermoduler som använder en gitfile (vilket innebär att de klonades med en Git-version 1.7.8 eller senare) kommer att tas bort från arbetsträdet, eftersom deras arkiv finns i superprojektets .git-katalog. Om en undermodul (eller en av de som är kapslade i den) fortfarande använder en .git-katalog, flyttar git rm undermodulernas git-katalog till superprojektens git-katalog för att skydda undermodulens historik. Om den existerar kommer även avsnittet submodule.<namn> i filen gitmodules[5] att tas bort och den filen kommer att köas (såvida inte --cached eller -n används).

En undermodul anses vara aktuell när HEAD är densamma som registrerats i indexet, inga spårade filer är modifierade och inga ospårade filer som inte ignoreras finns i undermodulens arbetsträd. Ignorerade filer anses vara förbrukningsbara och hindrar inte en undermoduls arbetsträd från att tas bort.

Om du bara vill ta bort den lokala utcheckningen av en undermodul från ditt arbetsträd utan att checka in borttagningen, använd i stället git-submodule[1] deinit. Se även gitsubmodules[7] för detaljer om borttagning av undermoduler.

EXEMPEL

git rm Dokumentation/\*.txt

Tar bort alla *.txt-filer från indexet som finns under katalogen Dokumentation och alla dess underkataloger.

Observera att asterisken * citeras från skalet i det här exemplet; detta låter Git, och inte skalet, expandera sökvägarna till filer och underkataloger under katalogen Dokumentation/.

git rm -f git-*.sh

Eftersom det här exemplet låter skalet expandera asterisken (d.v.s. du listar filerna explicit), tar det inte bort subdir/git-foo.sh.

BUGGAR

Varje gång en superprojektuppdatering tar bort en ifylld undermodul (t.ex. när man växlar mellan incheckningar före och efter borttagningen) kommer en inaktuell undermodulutcheckning att finnas kvar på den gamla platsen. Att ta bort den gamla katalogen är bara säkert när den använder en gitfile, eftersom annars även undermodulens historik kommer att raderas. Detta steg kommer att vara föråldrat när rekursiv undermoduluppdatering har implementerats.

SE ÄVEN

GIT

En del av git[1]-sviten