设置和配置
获取和创建项目
基本快照
分支和合并
共享和更新项目
检查和比较
补丁
调试
电子邮件
外部系统
服务器管理
指南
管理
底层命令
- 2.43.1 → 2.49.0 没有更改
-
2.43.0
2023-11-20
- 2.34.1 → 2.42.4 没有更改
-
2.34.0
2021-11-15
- 2.32.1 → 2.33.8 没有更改
-
2.32.0
2021-06-06
- 2.26.1 → 2.31.8 没有更改
-
2.26.0
2020-03-22
- 2.16.6 → 2.25.5 没有更改
-
2.15.4
2019-12-06
-
2.14.6
2019-12-06
-
2.13.7
2018-05-22
- 2.1.4 → 2.12.5 没有更改
-
2.0.5
2014-12-17
概要
git rm [-f | --force] [-n] [-r] [--cached] [--ignore-unmatch] [--quiet] [--pathspec-from-file=<file> [--pathspec-file-nul]] [--] [<pathspec>…]
描述
从索引或工作区和索引中删除匹配路径说明的文件。git rm
不会仅从您的工作目录中删除文件。(没有选项仅从工作区中删除文件,但仍将其保留在索引中;如果要这样做,请使用 /bin/rm
。)要删除的文件必须与分支的顶端相同,并且不能在索引中暂存对其内容的更新,尽管可以通过 -f
选项覆盖该默认行为。当给定 --cached
时,暂存的内容必须与分支的顶端或磁盘上的文件匹配,允许仅从索引中删除文件。当使用稀疏检出时(请参阅 git-sparse-checkout[1]),git rm
将仅删除稀疏检出模式内的路径。
选项
- <路径说明>…
-
要删除的文件。可以给出前导目录名(例如,
dir
以删除dir/file1
和dir/file2
)以删除目录中的所有文件,并递归删除所有子目录,但这需要显式给出-r
选项。该命令仅删除 Git 已知的路径。
文件全局匹配跨越目录边界。因此,给定两个目录
d
和d2
,使用git rm 'd*'
和git rm 'd/*'
之间存在差异,因为前者也会删除目录d2
的所有内容。有关更多详细信息,请参阅 gitglossary[7] 中的 *路径说明* 条目。
- -f
- --force
-
覆盖最新检查。
- -n
- --dry-run
-
实际上不删除任何文件。而是仅显示它们是否存在于索引中,并且是否会被该命令删除。
- -r
-
当给出前导目录名时,允许递归删除。
- --
-
此选项可用于将命令行选项与文件列表分开(当文件名可能被误认为命令行选项时很有用)。
- --cached
-
使用此选项仅从索引中取消暂存和删除路径。工作区文件,无论是否已修改,都将保持不变。
- --ignore-unmatch
-
即使没有匹配任何文件,也以零状态退出。
- --sparse
-
允许更新稀疏检出锥体之外的索引条目。通常,
git rm
拒绝更新其路径不适合稀疏检出锥体的索引条目。有关更多信息,请参见 git-sparse-checkout[1]。 - -q
- --quiet
-
git rm
通常为删除的每个文件输出一行(以rm
命令的形式)。此选项禁止该输出。 - --pathspec-from-file=<file>
-
路径说明在
<file>
中传递,而不是在命令行参数中传递。如果<file>
恰好是-
,则使用标准输入。路径说明元素由 LF 或 CR/LF 分隔。可以按照配置变量core.quotePath
的说明引用路径说明元素(请参见 git-config[1])。另请参阅--pathspec-file-nul
和全局--literal-pathspecs
。 - --pathspec-file-nul
-
仅对
--pathspec-from-file
有意义。路径说明元素用 NUL 字符分隔,所有其他字符都按字面意思理解(包括换行符和引号)。
删除从文件系统中消失的文件
没有选项供 git rm
仅从索引中删除从文件系统中消失的路径。但是,根据用例,有几种方法可以做到这一点。
使用“git commit -a”
如果您打算使您的下一个提交记录工作区中所有已跟踪文件的修改,并记录已使用 rm
(而不是 git rm
)从工作区中删除的所有文件的删除,请使用 git commit -a
,因为它会自动注意到并记录所有删除。您也可以通过使用 git add -u
在不提交的情况下获得类似的效果。
使用“git add -A”
当接受供应商分支的新代码发布时,您可能希望记录路径的删除以及新路径的添加以及现有路径的修改。
通常,您首先使用以下命令从工作区中删除所有已跟踪的文件
git ls-files -z | xargs -0 rm -f
然后将新代码解压到工作区中。或者,您可以将更改 rsync 到工作区中。
之后,记录工作区中所有删除、添加和修改的最简单方法是
git add -A
请参见 git-add[1]。
子模块
只有使用 gitfile 的子模块(这意味着它们是用 Git 版本 1.7.8 或更高版本克隆的)才会从工作树中删除,因为它们的存储库位于超级项目的 .git 目录中。如果一个子模块(或嵌套在其中的一个子模块)仍然使用 .git 目录,则 git rm
会将子模块的 git 目录移动到超级项目的 git 目录中,以保护子模块的历史记录。如果存在 gitmodules[5] 文件中的 submodule.<name> 部分,也会将其删除,并且该文件将被暂存(除非使用 --cached 或 -n)。
当 HEAD 与索引中记录的相同,没有修改已跟踪的文件,并且子模块的工作树中不存在未跟踪的未忽略的文件时,子模块被认为是最新状态。忽略的文件被认为是可牺牲的,不会阻止删除子模块的工作树。
如果您只想从工作树中删除子模块的本地检出而不提交删除,请改用 git-submodule[1] deinit
。另请参阅 gitsubmodules[7],以了解有关子模块删除的详细信息。
错误
每次超级项目更新移除一个已填充的子模块(例如,在移除前后切换提交时),一个过时的子模块检出将会保留在旧的位置。只有当它使用 gitfile 时,移除旧目录才是安全的,否则子模块的历史记录也会被删除。当递归子模块更新实现后,此步骤将变得过时。
GIT
属于 git[1] 套件的一部分