目录
在日常开发中,我们经常需要删除文件。如果你使用 Git 进行版本管理,那么你可能会接触到两种删除方式:
系统自带的
rm
命令(如 Linux、macOS 下的rm
,Windows 下的del
)Git 提供的
git rm
命令
这两者虽然都能“删除文件”,但它们的作用范围和原理完全不同。下面我们来详细讲解。
一、系统的 rm
命令
作用
直接删除文件或目录,仅仅是在 文件系统层面 进行删除操作。
不会通知 Git,更不会更新 Git 的索引(暂存区)。
示例
rm test.txt
执行后 test.txt
文件会从你的工作区消失,但 Git 依然认为该文件存在于版本控制中。
此时 git status
会提示:
deleted: test.txt
Git 会检测到该文件“在工作区消失”,但它还在 Git 的索引里,必须通过 git add
或 git rm
才能同步到版本库。
二、Git 的 git rm
命令
作用
同时删除工作区的文件,并且 更新 Git 的索引(暂存区)。
这样在下一次提交(
git commit
)时,Git 就会记录该文件的删除操作。
常用用法
git rm test.txt
执行后:
文件
test.txt
会被删除(和rm
一样消失在磁盘上)。Git 的索引会更新,下次提交会自动包含“删除
test.txt
”的操作。
常见参数
git rm --cached test.txt
只从 Git 索引中删除文件,不删除工作区文件。常用于 停止追踪某些文件(例如误提交的配置文件)。git rm -r folder/
删除文件夹及其中的文件。
三、区别总结
命令 | 是否删除工作区文件 | 是否更新 Git 索引 | 提交后是否记录删除 |
---|---|---|---|
rm |
✅ 是 | ❌ 否 | ❌ 否 |
git rm |
✅ 是 | ✅ 是 | ✅ 是 |
git rm --cached |
❌ 否 | ✅ 是 | ✅ 是 |
简而言之:
rm
只是文件系统的删除,不会通知 Git。git rm
是 Git 的命令,既删文件又更新 Git 状态。
四、使用场景对比
只想从项目里删除文件,并让 Git 记录删除操作 → 用
git rm
git rm test.txt git commit -m "delete test.txt"
2.文件误提交了,只想让 Git 停止追踪,但保留本地文件 → 用
git rm --cached
git rm --cached config.json echo "config.json" >> .gitignore git commit -m "stop tracking config.json"
3.只是临时删除文件,本地测试用,不希望 Git 记录 → 用
rm
rm temp.log # 不提交即可
五、常见误区
误以为
rm
和git rm
等价
其实rm
删除文件后,你还需要再执行git add
或git rm
才能同步到 Git。误删文件想恢复
如果你用git rm
或rm
删除了文件,只要还没提交,可以通过下面命令恢复:git checkout -- test.txt
如果已经提交了,可以用 Git 的历史版本恢复。
六、总结
rm
:只是操作系统的命令,单纯删除文件,Git 不知道。git rm
:Git 命令,删除文件的同时更新索引,确保删除操作能被提交。
所以,在 需要让 Git 知道文件被删除 时,一定要用 git rm
,而不仅仅是 rm
。