git rm命令未删除文件反而意外暂存,求解释原因
对
git rm命令的理解误区解析 核心问题是没搞懂git rm的参数逻辑,以及git reset HEAD的实际影响
第一次执行
git rm test.txt时,test.txt是Git已经追踪的文件,这个命令默认会同时干两件事:删掉工作区的物理文件,把「删除文件」的操作暂存到暂存区,所以git status显示该文件处于已暂存删除的状态。你执行
git reset HEAD test.txt的时候,以为只是取消暂存,但实际上Git还会自动把版本库里的test.txt恢复回工作区——因为撤销暂存的删除后,Git要让工作区、暂存区、版本库的状态保持一致,所以此时工作区里的test.txt又回来了,状态是已追踪但没修改。第二次执行
git rm test.txt出现的异常结果(只暂存删除但没删工作区文件),说明你大概率是误加了--cached参数,或者对git rm的两种用法搞混了:- 不带参数的
git rm test.txt:只要工作区有这个文件,一定会删掉物理文件并暂存删除 - 带
--cached的git rm --cached test.txt:只会把文件从暂存区移除,工作区的文件保留,此时git status就会显示已暂存删除但文件还在——这正是你最后看到的情况。
- 不带参数的
你的理解误区在于:一是没区分git rm和git rm --cached的差异,二是不知道git reset HEAD会把删除的文件恢复回工作区,导致对第二次执行命令的预期和实际行为不符。
内容的提问来源于stack exchange,提问作者Maryam Zng
相关产品推荐
相关产品推荐

