我有一个文件,比如说 file.txt 我已经完成了 git mv file.txt 到 file1.txt,然后我创建了一个名为 file.txt 的新文件并对其进行了处理。不幸的是,我还没有将该文件添加到 git。无论如何,问题是我做了 git stash,然后 git stash apply,但是新的 file.txt 消失了......无论如何要找回它?
4 回答
这里的问题主要是对做什么的误解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
不会保存未跟踪的文件(它可能不应该)。
这看起来像是存储中的严重(即数据丢失)错误。请报告。不幸的是,我不相信有任何方法可以让新的file.txt
回归。
此错误现已在 git >=1.7.1.1 中修复。
对于未来,用于git stash -u
存储未提交的文件(http://www.kernel.org/pub/software/scm/git/docs/git-stash.html)我相信您可以从 git 版本 1.7 开始执行此操作。
这篇文章只是为了简单地说明娱乐过程,而不是塞进评论里。注意:使用 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