奇怪的git案例 - git stash后跟git stash应用丢失的未提交数据?

khe*_*lll 6 git git-stash data-loss

我有一个文件,比如file.txt我已经把git mv file.txt写到了file1.txt,然后我创建了一个名为file.txt的新文件并对其进行了处理.不幸的是我没有将该文件添加到git中.无论如何问题是我做了git stash,然后是git stash apply,但是新的file.txt消失了......无论如何要把它取回来?

Dan*_*ing 9

这里的问题主要是误解了什么git stash save.它仅保存对跟踪文件的更改.未跟踪的文件不会保存git stash.将file.txt移动到file1.txt时,新的file.txt是未跟踪的文件,不会保存git stash.这不是一个错误,它只是git stash表现的方式.可能是文档git stash应该更清楚这一点.

作为git stash save状态的文档,它将git reset --hard在保存更改后执行.它git reset --hard覆盖了新的file.txt.有人可能会争辩说,git reset --hard如果未覆盖的文件被覆盖,应该生成警告,但我仍然不会将此称为错误.它正在做它应该做的事情.

在这里要理解的重要事情 - 以及能够为您节省很多麻烦的是 - git stash save 不能保存未跟踪的文件(并且它可能不应该保存).

  • 我不相信这是一种误解; 我相信这是一个铸铁虫.git无法在没有警告的情况下将更改丢弃到未跟踪的文件中.在用户试图藏匿的HEAD中跟踪文件*,而不是在索引中.出于这个原因,我相信git肯定应该在stash操作中保存工作树版本. (4认同)
  • @Dan:没有`git stash`是丢失文件内容的用户操作,因此它是`git stash`中的一个错误.它用HEAD版本用`reset --hard`覆盖修改后的文件.由于存储重置为文件的跟踪版本,因此应确保已保存任何覆盖的版本.`git stash`应该是一个安全的操作,它不像`reset --hard`那就是要求git扔东西.我不相信观察到的藏匿行为是可以接受的. (4认同)