Skip to content

git-rm

从工作树和索引中删除文件。

概要

bash
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 rm 将仅删除稀疏检出模式内的路径。

选项

  • <pathspec>...:要删除的文件。可以给出前导目录名称以删除目录中的所有文件。
  • -f, --force:覆盖最新性检查。
  • -n, --dry-run:不实际删除任何文件。只显示它们是否存在于索引中并且会被命令删除。
  • -r:允许在给出前导目录名称时递归删除。
  • --:此选项可用于将命令行选项与文件列表分开。
  • --cached:使用此选项仅从索引中取消暂存和删除路径。
  • --ignore-unmatch:即使没有文件匹配也以零状态退出。
  • --sparse:允许更新稀疏检出锥之外的索引条目。
  • -q, --quietgit rm 通常为每个删除的文件输出一行。此选项抑制该输出。
  • --pathspec-from-file=<file>:在 <file> 中传递路径规范。
  • --pathspec-file-nul:仅与 --pathspec-from-file 一起使用。

删除已从文件系统中消失的文件

git rm 没有选项可以仅从索引中删除已从文件系统中消失的文件。但是,根据用例,有几种方法可以做到这一点。

使用 git commit -a

如果您打算让下一次提交记录工作树中跟踪文件的所有修改,并记录使用 rm(而不是 git rm)从工作树中删除的所有文件,请使用 git commit -a

使用 git add -A

当为供应商分支接受新的代码投放时,您可能希望记录路径的删除和新路径的添加以及现有路径的修改。

其他方法

如果您真正想做的只是从索引中删除不再存在于工作树中的文件,请使用:

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

子模块

只有使用 gitfile 的子模块(这意味着它们是使用 Git 1.7.8 或更新版本克隆的)才会从工作树中删除。如果子模块仍使用 .git 目录,git rm 会将子模块的 git 目录移动到超级项目的 git 目录中以保护子模块的历史。

示例

bash
# 从索引中删除 Documentation 目录下的所有 .txt 文件
git rm Documentation/\*.txt

# 强制删除匹配 git-*.sh 的文件
git rm -f git-*.sh

另请参阅

git-add(1)

Git

git 套件的一部分

基于 CC BY-NC-SA 3.0 许可发布