例如我現在在工作區新建一個文件叫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 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。
git reset --hard 就是将暂存区和工作区的内容都重置成HEAD所指向的版本。
所以第二种情况下,你暂存区和工作区的test.html都没了。
至于第一种情况,你仔细看第一张图片,里面显示test.html为Untracked file,也就是说该文件没有被追踪,所以当然不会被删除了。
git reset
影响的是 Stage 和 Working 两个区域(你自己都说了),所以不是 Git 有 bug,而是你没有理解基础概念。1.暂存区撤销 git reset 不要--hard试试
2.工作区撤销用git checkout