6

私はファイルを持っています。たとえば、file.txtをfile1.txtに対してgit mv file.txtを実行してから、file.txtという名前の新しいファイルを作成して作業しました。残念ながら、私はまだそのファイルをgitに追加していません。とにかく問題は、私がgit stashを実行してから、git stashを適用したことですが、新しいfile.txtが消えました...とにかくそれを取り戻すには?

4

4 に答える 4

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 いないファイルを保存しないということです(そしておそらくそうすべきではありません)。

于 2010-04-10T16:48:19.077 に答える
4

これは、stashの重大な(つまりデータ損失)バグのように見えます。報告してください。残念ながら、新しいものを取り戻す方法はないと思います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 に答える