搜索

首页  >  问答  >  正文

一个奇怪的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 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。

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

全部回复(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
  • 取消回复