Carl Worth | d4a1cab | 2006-02-21 15:04:51 -0800 | [diff] [blame] | 1 | git-rm(1) |
| 2 | ========= |
| 3 | |
| 4 | NAME |
| 5 | ---- |
Fredrik Kuivinen | 7bd7f28 | 2006-03-09 17:24:50 +0100 | [diff] [blame] | 6 | git-rm - Remove files from the working tree and from the index |
Carl Worth | d4a1cab | 2006-02-21 15:04:51 -0800 | [diff] [blame] | 7 | |
| 8 | SYNOPSIS |
| 9 | -------- |
Martin von Zweigbergk | 7791a1d | 2011-07-01 22:38:26 -0400 | [diff] [blame] | 10 | [verse] |
Pieter de Bie | 01144f2 | 2008-08-09 00:37:02 +0200 | [diff] [blame] | 11 | 'git rm' [-f | --force] [-n] [-r] [--cached] [--ignore-unmatch] [--quiet] [--] <file>... |
Carl Worth | d4a1cab | 2006-02-21 15:04:51 -0800 | [diff] [blame] | 12 | |
| 13 | DESCRIPTION |
| 14 | ----------- |
Jon Loeliger | 25dc720 | 2008-04-16 18:41:27 -0500 | [diff] [blame] | 15 | Remove files from the index, or from the working tree and the index. |
Björn Gustavsson | 441947f | 2009-12-07 19:26:57 +0100 | [diff] [blame] | 16 | `git rm` will not remove a file from just your working directory. |
Björn Gustavsson | 47b7012 | 2009-12-07 19:35:42 +0100 | [diff] [blame] | 17 | (There is no option to remove a file only from the working tree |
Jon Loeliger | 25dc720 | 2008-04-16 18:41:27 -0500 | [diff] [blame] | 18 | and yet keep it in the index; use `/bin/rm` if you want to do that.) |
| 19 | The files being removed have to be identical to the tip of the branch, |
| 20 | and no updates to their contents can be staged in the index, |
| 21 | though that default behavior can be overridden with the `-f` option. |
Björn Gustavsson | 441947f | 2009-12-07 19:26:57 +0100 | [diff] [blame] | 22 | When `--cached` is given, the staged content has to |
Jon Loeliger | 25dc720 | 2008-04-16 18:41:27 -0500 | [diff] [blame] | 23 | match either the tip of the branch or the file on disk, |
| 24 | allowing the file to be removed from just the index. |
Carl Worth | d4a1cab | 2006-02-21 15:04:51 -0800 | [diff] [blame] | 25 | |
| 26 | |
| 27 | OPTIONS |
| 28 | ------- |
| 29 | <file>...:: |
Junio C Hamano | 08d2248 | 2006-12-25 03:23:45 -0800 | [diff] [blame] | 30 | Files to remove. Fileglobs (e.g. `*.c`) can be given to |
Jon Loeliger | 25dc720 | 2008-04-16 18:41:27 -0500 | [diff] [blame] | 31 | remove all matching files. If you want git to expand |
| 32 | file glob characters, you may need to shell-escape them. |
| 33 | A leading directory name |
| 34 | (e.g. `dir` to remove `dir/file1` and `dir/file2`) can be |
| 35 | given to remove all files in the directory, and recursively |
| 36 | all sub-directories, |
| 37 | but this requires the `-r` option to be explicitly given. |
Carl Worth | d4a1cab | 2006-02-21 15:04:51 -0800 | [diff] [blame] | 38 | |
| 39 | -f:: |
Pieter de Bie | 01144f2 | 2008-08-09 00:37:02 +0200 | [diff] [blame] | 40 | --force:: |
Junio C Hamano | 08d2248 | 2006-12-25 03:23:45 -0800 | [diff] [blame] | 41 | Override the up-to-date check. |
Carl Worth | d4a1cab | 2006-02-21 15:04:51 -0800 | [diff] [blame] | 42 | |
Stephan Beyer | 3240240 | 2008-06-08 03:36:09 +0200 | [diff] [blame] | 43 | -n:: |
| 44 | --dry-run:: |
Jon Loeliger | 25dc720 | 2008-04-16 18:41:27 -0500 | [diff] [blame] | 45 | Don't actually remove any file(s). Instead, just show |
| 46 | if they exist in the index and would otherwise be removed |
| 47 | by the command. |
Carl Worth | d4a1cab | 2006-02-21 15:04:51 -0800 | [diff] [blame] | 48 | |
Junio C Hamano | 08d2248 | 2006-12-25 03:23:45 -0800 | [diff] [blame] | 49 | -r:: |
| 50 | Allow recursive removal when a leading directory name is |
| 51 | given. |
Carl Worth | d4a1cab | 2006-02-21 15:04:51 -0800 | [diff] [blame] | 52 | |
sean | e994004 | 2006-05-05 15:05:24 -0400 | [diff] [blame] | 53 | \--:: |
Carl Worth | d4a1cab | 2006-02-21 15:04:51 -0800 | [diff] [blame] | 54 | This option can be used to separate command-line options from |
| 55 | the list of files, (useful when filenames might be mistaken |
| 56 | for command-line options). |
| 57 | |
Stephan Beyer | 3240240 | 2008-06-08 03:36:09 +0200 | [diff] [blame] | 58 | --cached:: |
Jon Loeliger | 25dc720 | 2008-04-16 18:41:27 -0500 | [diff] [blame] | 59 | Use this option to unstage and remove paths only from the index. |
| 60 | Working tree files, whether modified or not, will be |
| 61 | left alone. |
Junio C Hamano | 08d2248 | 2006-12-25 03:23:45 -0800 | [diff] [blame] | 62 | |
Stephan Beyer | 3240240 | 2008-06-08 03:36:09 +0200 | [diff] [blame] | 63 | --ignore-unmatch:: |
Steven Grimm | bb1faf0 | 2007-04-16 00:53:24 -0700 | [diff] [blame] | 64 | Exit with a zero status even if no files matched. |
| 65 | |
Stephan Beyer | 3240240 | 2008-06-08 03:36:09 +0200 | [diff] [blame] | 66 | -q:: |
| 67 | --quiet:: |
Björn Gustavsson | 441947f | 2009-12-07 19:26:57 +0100 | [diff] [blame] | 68 | `git rm` normally outputs one line (in the form of an `rm` command) |
Steven Grimm | b48caa2 | 2007-04-16 00:46:48 -0700 | [diff] [blame] | 69 | for each file removed. This option suppresses that output. |
| 70 | |
Carl Worth | d4a1cab | 2006-02-21 15:04:51 -0800 | [diff] [blame] | 71 | |
| 72 | DISCUSSION |
| 73 | ---------- |
| 74 | |
Jon Loeliger | 25dc720 | 2008-04-16 18:41:27 -0500 | [diff] [blame] | 75 | The <file> list given to the command can be exact pathnames, |
| 76 | file glob patterns, or leading directory names. The command |
| 77 | removes only the paths that are known to git. Giving the name of |
Junio C Hamano | 08d2248 | 2006-12-25 03:23:45 -0800 | [diff] [blame] | 78 | a file that you have not told git about does not remove that file. |
Carl Worth | d4a1cab | 2006-02-21 15:04:51 -0800 | [diff] [blame] | 79 | |
Jon Loeliger | 25dc720 | 2008-04-16 18:41:27 -0500 | [diff] [blame] | 80 | File globbing matches across directory boundaries. Thus, given |
| 81 | two directories `d` and `d2`, there is a difference between |
Jeff King | 6cf378f | 2012-04-26 04:51:57 -0400 | [diff] [blame] | 82 | using `git rm 'd*'` and `git rm 'd/*'`, as the former will |
Jon Loeliger | 25dc720 | 2008-04-16 18:41:27 -0500 | [diff] [blame] | 83 | also remove all of directory `d2`. |
Carl Worth | d4a1cab | 2006-02-21 15:04:51 -0800 | [diff] [blame] | 84 | |
Björn Gustavsson | 47b7012 | 2009-12-07 19:35:42 +0100 | [diff] [blame] | 85 | REMOVING FILES THAT HAVE DISAPPEARED FROM THE FILESYSTEM |
| 86 | -------------------------------------------------------- |
| 87 | There is no option for `git rm` to remove from the index only |
| 88 | the paths that have disappeared from the filesystem. However, |
| 89 | depending on the use case, there are several ways that can be |
| 90 | done. |
| 91 | |
Michael J Gruber | f34e9ed | 2010-12-07 10:07:11 +0100 | [diff] [blame] | 92 | Using ``git commit -a'' |
| 93 | ~~~~~~~~~~~~~~~~~~~~~~~ |
Björn Gustavsson | 47b7012 | 2009-12-07 19:35:42 +0100 | [diff] [blame] | 94 | If you intend that your next commit should record all modifications |
| 95 | of tracked files in the working tree and record all removals of |
| 96 | files that have been removed from the working tree with `rm` |
| 97 | (as opposed to `git rm`), use `git commit -a`, as it will |
| 98 | automatically notice and record all removals. You can also have a |
| 99 | similar effect without committing by using `git add -u`. |
| 100 | |
Michael J Gruber | f34e9ed | 2010-12-07 10:07:11 +0100 | [diff] [blame] | 101 | Using ``git add -A'' |
| 102 | ~~~~~~~~~~~~~~~~~~~~ |
Björn Gustavsson | 47b7012 | 2009-12-07 19:35:42 +0100 | [diff] [blame] | 103 | When accepting a new code drop for a vendor branch, you probably |
| 104 | want to record both the removal of paths and additions of new paths |
| 105 | as well as modifications of existing paths. |
| 106 | |
| 107 | Typically you would first remove all tracked files from the working |
| 108 | tree using this command: |
| 109 | |
| 110 | ---------------- |
| 111 | git ls-files -z | xargs -0 rm -f |
| 112 | ---------------- |
| 113 | |
Michael J Gruber | f34e9ed | 2010-12-07 10:07:11 +0100 | [diff] [blame] | 114 | and then untar the new code in the working tree. Alternately |
| 115 | you could 'rsync' the changes into the working tree. |
Björn Gustavsson | 47b7012 | 2009-12-07 19:35:42 +0100 | [diff] [blame] | 116 | |
| 117 | After that, the easiest way to record all removals, additions, and |
| 118 | modifications in the working tree is: |
| 119 | |
| 120 | ---------------- |
| 121 | git add -A |
| 122 | ---------------- |
| 123 | |
| 124 | See linkgit:git-add[1]. |
| 125 | |
| 126 | Other ways |
| 127 | ~~~~~~~~~~ |
| 128 | If all you really want to do is to remove from the index the files |
| 129 | that are no longer present in the working tree (perhaps because |
| 130 | your working tree is dirty so that you cannot use `git commit -a`), |
| 131 | use the following command: |
| 132 | |
| 133 | ---------------- |
| 134 | git diff --name-only --diff-filter=D -z | xargs -0 git rm --cached |
| 135 | ---------------- |
| 136 | |
Carl Worth | d4a1cab | 2006-02-21 15:04:51 -0800 | [diff] [blame] | 137 | EXAMPLES |
| 138 | -------- |
Jeff King | 5d2fc91 | 2011-08-03 20:13:29 -0600 | [diff] [blame] | 139 | `git rm Documentation/\*.txt`:: |
Jonathan Nieder | c300578 | 2010-08-20 05:30:24 -0500 | [diff] [blame] | 140 | Removes all `*.txt` files from the index that are under the |
Junio C Hamano | a9877f8 | 2007-01-16 11:50:29 -0800 | [diff] [blame] | 141 | `Documentation` directory and any of its subdirectories. |
Carl Worth | d4a1cab | 2006-02-21 15:04:51 -0800 | [diff] [blame] | 142 | + |
Jonathan Nieder | c300578 | 2010-08-20 05:30:24 -0500 | [diff] [blame] | 143 | Note that the asterisk `*` is quoted from the shell in this |
Jon Loeliger | 25dc720 | 2008-04-16 18:41:27 -0500 | [diff] [blame] | 144 | example; this lets git, and not the shell, expand the pathnames |
| 145 | of files and subdirectories under the `Documentation/` directory. |
Carl Worth | d4a1cab | 2006-02-21 15:04:51 -0800 | [diff] [blame] | 146 | |
Jeff King | 5d2fc91 | 2011-08-03 20:13:29 -0600 | [diff] [blame] | 147 | `git rm -f git-*.sh`:: |
Junio C Hamano | a9877f8 | 2007-01-16 11:50:29 -0800 | [diff] [blame] | 148 | Because this example lets the shell expand the asterisk |
| 149 | (i.e. you are listing the files explicitly), it |
Junio C Hamano | 08d2248 | 2006-12-25 03:23:45 -0800 | [diff] [blame] | 150 | does not remove `subdir/git-foo.sh`. |
Carl Worth | d4a1cab | 2006-02-21 15:04:51 -0800 | [diff] [blame] | 151 | |
Junio C Hamano | 56ae8df | 2008-05-28 16:55:27 -0700 | [diff] [blame] | 152 | SEE ALSO |
Jeff Muizelaar | 872d001 | 2006-03-05 16:18:19 -0500 | [diff] [blame] | 153 | -------- |
Dan McGee | 5162e69 | 2007-12-29 00:20:38 -0600 | [diff] [blame] | 154 | linkgit:git-add[1] |
Carl Worth | d4a1cab | 2006-02-21 15:04:51 -0800 | [diff] [blame] | 155 | |
Carl Worth | d4a1cab | 2006-02-21 15:04:51 -0800 | [diff] [blame] | 156 | GIT |
| 157 | --- |
Christian Couder | 9e1f0a8 | 2008-06-06 09:07:32 +0200 | [diff] [blame] | 158 | Part of the linkgit:git[1] suite |