私はファイルを持っています。たとえば、file.txtをfile1.txtに対してgit mv file.txtを実行してから、file.txtという名前の新しいファイルを作成して作業しました。残念ながら、私はまだそのファイルをgitに追加していません。とにかく問題は、私がgit stashを実行してから、git stashを適用したことですが、新しいfile.txtが消えました...とにかくそれを取り戻すには?
4 に答える
ここでの問題は、ほとんどの場合、何をするのかについての誤解です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
いないファイルを保存しないということです(そしておそらくそうすべきではありません)。
これは、stashの重大な(つまりデータ損失)バグのように見えます。報告してください。残念ながら、新しいものを取り戻す方法はないと思います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