我有一个文件,比如file.txt我已经把git mv file.txt写到了file1.txt,然后我创建了一个名为file.txt的新文件并对其进行了处理。不幸的是我没有将该文件添加到git中。无论如何问题是我做了git stash,然后是git stash apply,但新的file.txt消失了......无论如何要把它取回来?
答案 0 :(得分: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
不保存未跟踪的文件(并且可能不应该)
答案 1 :(得分:4)
这看起来像藏匿中的严重(即数据丢失)错误。请报告。不幸的是,我不相信有任何办法让新file.txt
回来。
此错误现已在git> = 1.7.1.1中修复。
答案 2 :(得分:2)
以后,使用git stash -u
来存储未提交的文件(http://www.kernel.org/pub/software/scm/git/docs/git-stash.html)您可以从git版本1.7我相信。
答案 3 :(得分: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