6

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

4

4 回答 4

9

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

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

在这里要理解的重要一点 - 并且会为您节省很多麻烦 -git stash save 不会保存未跟踪的文件(它可能不应该)。

于 2010-04-10T16:48:19.077 回答
4

这看起来像是存储中的严重(即数据丢失)错误。请报告。不幸的是,我不相信有任何方法可以让新的file.txt回归。

此错误现已在 git >=1.7.1.1 中修复。

于 2010-04-10T16:18:51.073 回答
2

对于未来,用于git stash -u存储未提交的文件(http://www.kernel.org/pub/software/scm/git/docs/git-stash.html)我相信您可以从 git 版本 1.7 开始执行此操作。

于 2012-11-01T17:34:43.927 回答
1

这篇文章只是为了简单地说明娱乐过程,而不是塞进评论里。注意:使用 Git 版本 1.7.0.2

要重新创建:

~/test $ git init
~/test $ echo "hello" > file.txt
~/test $ git add .
~/test $ git commit -m "init commit"

~/test $ git mv file.txt file1.txt
~/test $ echo "new data" > file.txt
~/test $ git stash
~/test $ git stash apply

~/test $ cat file.txt
cat: file.txt: No such file or directory

~/test $ cat file1.txt
hello
于 2010-04-10T16:44:21.387 回答