]> git.ipfire.org Git - thirdparty/git.git/blame - Documentation/git-rm.txt
Merge branch 'dd/iso-8601-updates'
[thirdparty/git.git] / Documentation / git-rm.txt
CommitLineData
d4a1cab5
CW
1git-rm(1)
2=========
3
4NAME
5----
7bd7f280 6git-rm - Remove files from the working tree and from the index
d4a1cab5
CW
7
8SYNOPSIS
9--------
7791a1d9 10[verse]
5f393dc3
AM
11'git rm' [-f | --force] [-n] [-r] [--cached] [--ignore-unmatch]
12 [--quiet] [--pathspec-from-file=<file> [--pathspec-file-nul]]
13 [--] [<pathspec>...]
d4a1cab5
CW
14
15DESCRIPTION
16-----------
6a7aca6f
AM
17Remove files matching pathspec from the index, or from the working tree
18and the index. `git rm` will not remove a file from just your working
19directory. (There is no option to remove a file only from the working
20tree and yet keep it in the index; use `/bin/rm` if you want to do
21that.) The files being removed have to be identical to the tip of the
22branch, and no updates to their contents can be staged in the index,
25dc7200 23though that default behavior can be overridden with the `-f` option.
441947f6 24When `--cached` is given, the staged content has to
25dc7200
JL
25match either the tip of the branch or the file on disk,
26allowing the file to be removed from just the index.
d4a1cab5
CW
27
28
29OPTIONS
30-------
6a7aca6f
AM
31<pathspec>...::
32 Files to remove. A leading directory name (e.g. `dir` to remove
33 `dir/file1` and `dir/file2`) can be given to remove all files in
34 the directory, and recursively all sub-directories, but this
35 requires the `-r` option to be explicitly given.
36+
37The command removes only the paths that are known to Git.
38+
39File globbing matches across directory boundaries. Thus, given two
40directories `d` and `d2`, there is a difference between using
41`git rm 'd*'` and `git rm 'd/*'`, as the former will also remove all
42of directory `d2`.
43+
44For more details, see the 'pathspec' entry in linkgit:gitglossary[7].
d4a1cab5
CW
45
46-f::
01144f20 47--force::
08d22488 48 Override the up-to-date check.
d4a1cab5 49
3240240f
SB
50-n::
51--dry-run::
25dc7200
JL
52 Don't actually remove any file(s). Instead, just show
53 if they exist in the index and would otherwise be removed
54 by the command.
d4a1cab5 55
08d22488
JH
56-r::
57 Allow recursive removal when a leading directory name is
58 given.
d4a1cab5 59
e994004f 60\--::
d4a1cab5
CW
61 This option can be used to separate command-line options from
62 the list of files, (useful when filenames might be mistaken
63 for command-line options).
64
3240240f 65--cached::
25dc7200
JL
66 Use this option to unstage and remove paths only from the index.
67 Working tree files, whether modified or not, will be
68 left alone.
08d22488 69
3240240f 70--ignore-unmatch::
bb1faf0d
SG
71 Exit with a zero status even if no files matched.
72
3240240f
SB
73-q::
74--quiet::
441947f6 75 `git rm` normally outputs one line (in the form of an `rm` command)
b48caa20
SG
76 for each file removed. This option suppresses that output.
77
5f393dc3
AM
78--pathspec-from-file=<file>::
79 Pathspec is passed in `<file>` instead of commandline args. If
80 `<file>` is exactly `-` then standard input is used. Pathspec
81 elements are separated by LF or CR/LF. Pathspec elements can be
82 quoted as explained for the configuration variable `core.quotePath`
83 (see linkgit:git-config[1]). See also `--pathspec-file-nul` and
84 global `--literal-pathspecs`.
85
86--pathspec-file-nul::
87 Only meaningful with `--pathspec-from-file`. Pathspec elements are
88 separated with NUL character and all other characters are taken
89 literally (including newlines and quotes).
90
d4a1cab5 91
47b70120
BG
92REMOVING FILES THAT HAVE DISAPPEARED FROM THE FILESYSTEM
93--------------------------------------------------------
94There is no option for `git rm` to remove from the index only
95the paths that have disappeared from the filesystem. However,
96depending on the use case, there are several ways that can be
97done.
98
f34e9edc
MG
99Using ``git commit -a''
100~~~~~~~~~~~~~~~~~~~~~~~
47b70120
BG
101If you intend that your next commit should record all modifications
102of tracked files in the working tree and record all removals of
103files that have been removed from the working tree with `rm`
104(as opposed to `git rm`), use `git commit -a`, as it will
105automatically notice and record all removals. You can also have a
106similar effect without committing by using `git add -u`.
107
f34e9edc
MG
108Using ``git add -A''
109~~~~~~~~~~~~~~~~~~~~
47b70120
BG
110When accepting a new code drop for a vendor branch, you probably
111want to record both the removal of paths and additions of new paths
112as well as modifications of existing paths.
113
114Typically you would first remove all tracked files from the working
115tree using this command:
116
117----------------
118git ls-files -z | xargs -0 rm -f
119----------------
120
f34e9edc
MG
121and then untar the new code in the working tree. Alternately
122you could 'rsync' the changes into the working tree.
47b70120
BG
123
124After that, the easiest way to record all removals, additions, and
125modifications in the working tree is:
126
127----------------
128git add -A
129----------------
130
131See linkgit:git-add[1].
132
133Other ways
134~~~~~~~~~~
135If all you really want to do is to remove from the index the files
136that are no longer present in the working tree (perhaps because
137your working tree is dirty so that you cannot use `git commit -a`),
138use the following command:
139
140----------------
141git diff --name-only --diff-filter=D -z | xargs -0 git rm --cached
142----------------
143
95c16418
JL
144SUBMODULES
145----------
3469c7eb 146Only submodules using a gitfile (which means they were cloned
2de9b711 147with a Git version 1.7.8 or newer) will be removed from the work
3469c7eb
MK
148tree, as their repository lives inside the .git directory of the
149superproject. If a submodule (or one of those nested inside it)
68602c01
SB
150still uses a .git directory, `git rm` will move the submodules
151git directory into the superprojects git directory to protect
152the submodule's history. If it exists the submodule.<name> section
153in the linkgit:gitmodules[5] file will also be removed and that file
154will be staged (unless --cached or -n are used).
3469c7eb 155
7560f547 156A submodule is considered up to date when the HEAD is the same as
3469c7eb
MK
157recorded in the index, no tracked files are modified and no untracked
158files that aren't ignored are present in the submodules work tree.
159Ignored files are deemed expendable and won't stop a submodule's work
160tree from being removed.
161
cf419828 162If you only want to remove the local checkout of a submodule from your
d4803455
SB
163work tree without committing the removal, use linkgit:git-submodule[1] `deinit`
164instead. Also see linkgit:gitsubmodules[7] for details on submodule removal.
cf419828 165
d4a1cab5
CW
166EXAMPLES
167--------
5d2fc913 168`git rm Documentation/\*.txt`::
c300578f 169 Removes all `*.txt` files from the index that are under the
a9877f83 170 `Documentation` directory and any of its subdirectories.
d4a1cab5 171+
c300578f 172Note that the asterisk `*` is quoted from the shell in this
2de9b711 173example; this lets Git, and not the shell, expand the pathnames
25dc7200 174of files and subdirectories under the `Documentation/` directory.
d4a1cab5 175
5d2fc913 176`git rm -f git-*.sh`::
a9877f83
JH
177 Because this example lets the shell expand the asterisk
178 (i.e. you are listing the files explicitly), it
08d22488 179 does not remove `subdir/git-foo.sh`.
d4a1cab5 180
bbad9f93
JL
181BUGS
182----
183Each time a superproject update removes a populated submodule
184(e.g. when switching between commits before and after the removal) a
185stale submodule checkout will remain in the old location. Removing the
186old directory is only safe when it uses a gitfile, as otherwise the
187history of the submodule will be deleted too. This step will be
188obsolete when recursive submodule update has been implemented.
189
56ae8df5 190SEE ALSO
872d001f 191--------
5162e697 192linkgit:git-add[1]
d4a1cab5 193
d4a1cab5
CW
194GIT
195---
9e1f0a85 196Part of the linkgit:git[1] suite