git rm命令作用范围疑问:是否仅删除工作区与暂存区文件
Git rm 命令的作用范围解析
你的理解完全正确:git rm仅会删除工作区和暂存区的文件,不会直接删除本地仓库(提交历史)中的文件。
具体细节拆解:
- 执行
git rm Test.txt时,Git会同步完成两个操作:移除本地工作区的Test.txt文件,同时将这个删除操作纳入暂存区,所以git status会显示该文件处于待提交的删除状态,ls命令也找不到该文件。 git ls-tree --full-tree -r --name-only HEAD查看的是当前HEAD指向的最新提交内容——也就是你之前git commit -m "1st commit"生成的提交,这个提交里依然保留着Test.txt的记录,因为你还没把这次删除操作提交到仓库。
当你执行git commit -m "delete Test.txt"后,新的提交会记录文件被删除的状态,此时再用git ls-tree查看新的HEAD,就看不到Test.txt了。不过需要注意:旧提交里的Test.txt历史记录依然存在,Git不会主动清理提交历史中的文件内容,除非使用git filter-repo这类专门重写历史的工具。
内容的提问来源于stack exchange,提问作者Harsha G
相关产品推荐
相关产品推荐

