搜尋

首頁  >  問答  >  主體

一個奇怪的git問題,請大家幫忙分析?

例如我現在在工作區新建一個文件叫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。

我想大声告诉你我想大声告诉你2794 天前567

全部回覆(3)我來回復

  • 高洛峰

    高洛峰2017-05-02 09:35:59

    git reset --hard 就是將暫存區和工作區的內容都重置成HEAD所指向的版本。
    所以第二種情況下,你暫存區和工作區的test.html都沒了。
    至於第一種情況,你仔細看第一張圖片,裡面顯示test.html為Untracked file,也就是說該文件沒有被追踪,所以當然不會被刪除了。

    回覆
    0
  • 给我你的怀抱

    给我你的怀抱2017-05-02 09:35:59

    Stage Area/Index Area(缓存区)
    
    ====================================
    
    Working Area(工作区)
    
    ====================================
    
    Untracking Area(未追踪文件,即新建文件)

    git reset 影響的是 Stage 和 Working 兩個區域(你自己都說了),所以不是 Git 有 bug,而是你沒有理解基礎概念。

    回覆
    0
  • 淡淡烟草味

    淡淡烟草味2017-05-02 09:35:59

    1.暫存區撤銷 git reset 不要--hard試試
    2.工作區撤銷用git checkout

    回覆
    0
  • 取消回覆