web-dev-qa-db-ja.com

git stashをポップできません。「次のファイルに対するローカルの変更はマージによって上書きされます」

だから、たくさんの変更といくつかの追跡されていないファイルがありました。私は何かを微調整する必要があったので、git stash -u、いくつかの変更を加え、それらの変更をコミットし、プッシュしてから、git stash pop

隠しておいたファイルをいくつか修正したため、次のメッセージが表示されました。

error: Your local changes to the following files would be overwritten by merge:
    file_1.py
    file_2.py
Please, commit your changes or stash them before you can merge.
Aborting

これは奇妙に思えます。すべての新しい変更をコミットしました。コマンドを実行したときのチェックアウトはきれいでした。

git stash pop操作は変更と追跡されていないファイルの半分を隠していないが、試してみるとgit stash pop再度、次のような出力が得られます。

some_file.html already exists, no checkout
some_other_file.html already exists, no checkout
yet_another_file.html already exists, no checkout
Could not restore untracked files from stash

git stash showはまだ隠された変更のリストを表示しますが、私が今何をしているのか迷っています。

どうすれば自分を解き放つことができますか?

49
fredley

これを回避したのは、作業ディレクトリがクリーンで最新だったため、何らかのバグだったに違いないと思います。

git checkout . それとその後 git stash applyは問題なく動作し、すべて問題なく戻ってきました。しかし、実際に失敗した原因を突き止めたいと思います。

23
fredley

do have未コミットの作品で、その作品を失うことなくスタッシュをポップしたい人のために、ここに方法があります(@iFreilichtに感謝):

  1. コミットされていない変更を一時的にステージングします。

    git add -u .
    
  2. これで、gitに文句を言わずにスタッシュを適用できます(うまくいけば):

    git stash pop
    
  3. すべてのステージングを解除しますが、ファイルはそのままにしておきます。

    git reset
    
63
joeytwiddle

-uで作成された隠し場所は、apply- ed(およびpopapply + drop)。

一般的なパラノイアから、mv追跡されていないファイルを安全な場所に置いてから、git stash apply、すべてを注意深くチェックし、git stash dropがすべて正しいと確信したら。 :-)

1
torek