>> >> >> Reference << << << <<<<<<Ref>>>>>>
rm
Modified: 2025-12-31 | Author:ljf12825

git rm是一个Git命令,用于从Git仓库的索引和工作目录中同时删除文件
简单来说,它做了两件事:

  1. 从工作目录删除物理文件
  2. 将这次“删除操作”add,下次commit时,这个删除会被记录

它的作用等同于手动执行以下两个命令

  1. rm <filename>(在磁盘上删除文件)
  2. git add <filename>(将删除这个变动添加到暂存区)

git rm一步到位,更加方便和语义化

使用

  1. 删除普通文件 删除一个已经被Git跟踪的文件(已经addcommit
git rm <file_path>

示例

git rm ole_file.txt
git status # deleted:: old_file.txt已被暂存
git commit -m "Remove the old file"
  1. 删除文件夹 删除整个文件夹及其中的所有文件,使用-r(递归)选项
git rm -r <directory_path>
  1. 强制删除(-f--force) 如果一个文件被修改过,并且修改还没有被暂存,Git为了防止意外丢失尚未保存的更改,会拒绝用普通的git rm删除
    此时,如果确定要删除的话,可以使用-f选项
git rm -f <file_path>
  1. 仅从索引中删除,但保留在工作目录中(--cached) 它只将文件从Git的暂存区中移除,停止对文件的跟踪,但会保留文件在本地工作目录中
    使用场景:
git rm --cached <file_path>

示例:
假设不小心把config.json(包含数据库密码)提交到了Git仓库,现在不想让它被Git跟踪,但又不想再本地删除它

  1. 首先,把config.json添加到.gitignore文件中,防止未来再次被跟踪
  2. 然后执行
git rm --cached config.json

# 查看状态,会看到"delete: config.json"在暂存区
# 同时,本地文件会显示为“未跟踪(untracked)”
git status

# 提交这次删除操作。注意:这次提交会从仓库历史中删除这个文件
# 但本地的 config.json文件依然存在
git commit -m "Stop tracking sensitive config file"

现在,config.json就不再被Git管理了,并且因为把它加入了.gitignore,它以后也不会被意外添加进去。其他开发者拉取这次提交后,他们的仓库中config.json会被删除,但他们本地的副本不会被影响(除非他们使用了git clean之类的命令)

参数

参数描述
f强制
-n/--dry-run仅显示
-r递归
--cached仅对暂存区
--ignore-unmatch即时没有匹配的文件也以零状态退出
--sparse稀疏检出,只检出版本库中的一个子集文件
-q/--quiet隐藏git rm对删除文件的输出
--pathspec-from-file=<file>从文件中读取要删除的内容的路径(pathspec)
--pathspec-file-nul仅对--pathspec-from-file有意义,使用NUL字符将pathspec元素分开,其他所有字符的含义不变