为什么git stash让我的工作目录处于脏状态?

时间:2015-02-22 19:00:41

标签: git

$ git add -A

$ git status 
... 
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   Source/ConfigGeneratorTests/ConfigGeneratorTests.csproj
        (and 20 other files) 

$ git stash save
Saved working directory and index state WIP on ...

$ git status 
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   Source/ConfigGeneratorTests/ConfigGeneratorTests.csproj
        (and 20 other files) 

stash save之后,添加到索引的文件现在不会被存储,也不会保存在索引中。是否有一个原因?我曾多次使用stash,从未见过这样做过。

2 个答案:

答案 0 :(得分:3)

我不确定它是不是真的是你的情况,但是最近我的同事已经将 .gitattributes 文件推送到了git repo(Windows,ASP.NET MVC项目)更改了行结尾设置的github(例如从 as-is checkout windows-style,commit linux-style )。

所以 git stash 没有产生任何错误但同时没有产生任何效果(修改过的文件出现在状态中并一直存在,直到我提交它们)。删除 .gitattributes 为我工作。

答案 1 :(得分:0)

我刚刚遇到git stash未能离开干净工作目录的另一个原因:我通过samba mount访问我的git repo。

一堆文件突然设置了执行权限,这显示出差异。 git stashgit reset --hard都无法恢复权限,可能是因为正在进行samba安装的客户端计算机实际上无法影响权限。

登录服务器并直接在其本机文件系统上访问git存储库会导致问题消失。