git rm 是什么
git rm 删除文件并把这次删除记录到暂存区,等于「在磁盘上删掉文件」加「git add 记录删除」两步合一。它只影响工作区与暂存区,要真正生效还需要提交。加 --cached 则是另一层意思:只把文件从版本库的跟踪清单里移出去,磁盘上的文件保留。
常见用途是停止跟踪
最常用的场景其实不是删文件,而是让某个已经被提交过的文件停止跟踪:把不小心提交的配置或日志用 git rm --cached 移出索引,再补进 .gitignore,从此它不再出现在改动清单里,而本地文件安然无恙。
基本信息
| 适用平台 | Linux / macOS / Windows(Git 2.x) |
|---|---|
| 语法 | git rm [选项] <文件>… |
| -r | 递归删除目录 |
| --cached | 只移出版本库跟踪,保留磁盘文件 |
| -f | 强制删除,用于已修改或已暂存的文件 |
| 等价操作 | 删除文件之后执行 git add -u 记录 |
典型使用场景
- 删除废弃文件:代码文件、临时脚本、旧文档
- 清理目录:用 -r 删除整个子目录
- 停止跟踪:把误提交的日志或密钥移出跟踪但保留本地文件
- 重构整理:删除旧模块并让这次删除进入提交
- 批量清理:配合通配符处理一批废弃文件
常用示例
常用示例
git rm old.txt # 删除文件并暂存该删除
git rm -r legacy/ # 递归删除目录
git rm --cached .env # 停止跟踪,保留本地文件
git rm -f build.log # 强制删除
git rm -n '*.tmp' # 演练:只列出会被删除的文件
git status --short # 核对删除是否已进入暂存区用途对照
| 写法 | 磁盘文件 | 版本库跟踪 |
|---|---|---|
| git rm <文件> | 删除 | 记录删除 |
| git rm --cached <文件> | 保留 | 移出跟踪 |
| git rm -r <目录> | 递归删除 | 记录删除 |
| git rm -f <文件> | 强制删除 | 记录删除 |
git rm 等价于先删除文件再执行 git add 记录删除;用文件管理器删掉文件后执行 git add -u 也能达到同样效果。
--cached 之后要把文件写进 .gitignore,否则下次 git add -A 又会把它加回跟踪,问题只是被推迟了一次,下次可能混进正式提交。
记录下来的删除同样在暂存区里,可以和其他改动一起提交,也可以用 git restore --staged 把这次删除从暂存区撤回,文件内容重新回到未暂存状态。