比如我现在在工作区新建一个文件叫test.html,然后git status:
git检测到这个新添加的文件,提示通过add加入暂存区。
下面执行:
git reset --hard
貌似没有执行什么,再看git status:
还是刚添加文件时的git status提示,新添加的test.html没有被删除。
现在执行:
git add dist/test.html
在查看git status状态:
新添加的test.html放入暂存区,下面执行:
git reset --hard
再看git status,工作区和暂存区全部干净了,新添加的test.html也没有了。
总结下两次操作的区别:
同样是新建了一个test.html文件
第一种是直接git reset --hard,新建test.html文件在工作区被保留
第二种是先add这个新建test.html文件,被添加到暂存区,然后git reset --hard,工作区的test.html文件也被删除了。
如果git reset --hard是拿上次提交的记录来覆盖工作区和暂存区的话,那么第一种情况时,test.html就应该被删除。如果是git reset --hard不对没有被追踪的文件进行处理的话,第二种情况下,test.html在工作区不会被删除。
自己已经晕了,等git来解答,我觉着这很可能是git的一个bug。
高洛峰2017-05-02 09:35:59
git reset --hard 就是将暂存区和工作区的内容都重置成HEAD所指向的版本。
所以第二种情况下,你暂存区和工作区的test.html都没了。
至于第一种情况,你仔细看第一张图片,里面显示test.html为Untracked file,也就是说该文件没有被追踪,所以当然不会被删除了。
给我你的怀抱2017-05-02 09:35:59
Stage Area/Index Area(缓存区)
====================================
Working Area(工作区)
====================================
Untracking Area(未追踪文件,即新建文件)
git reset
影响的是 Stage 和 Working 两个区域(你自己都说了),所以不是 Git 有 bug,而是你没有理解基础概念。