例如我現在在工作區新建一個文件叫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。
高洛峰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,而是你沒有理解基礎概念。