ステージングされた変更とステージングされていない変更が多数あったので、すぐに別のブランチに切り替えてから元に戻したいと考えていました。
そこで私は、次のように変更を段階的に実行しました。
$ git stash push -a
(後から考えてみると、--include-untracked
の代わりにを使うこともできたかもしれません--all
)
その後、スタッシュをポップしようとすると、次のようなエラーが大量に発生します。
$ git stash pop
foo.txt already exists, no checkout
bar.txt already exists, no checkout
...
Could not restore untracked files from stash entry
スタッシュから復元された変更はないようです。
私も試してみました$ git stash branch temp
が、同じエラーが表示されます。
私はこれを回避する方法を見つけました。それは次のものです:
$ git stash show -p | git apply
今のところ災害は回避されましたが、いくつかの疑問が生じています。
そもそもなぜこのエラーが発生したのでしょうか。また、次回はどのように回避すればよいのでしょうか。
ベストアンサー1
問題を再現できました。追跡されていないファイルをスタッシュしてからそれらのファイルを作成すると (例ではfoo.txt
とbar.txt
)、追跡されていないファイルへのローカルの変更が を適用すると上書きされてしまうようですgit stash pop
。
この問題を回避するには、次のコマンドを使用します。保存されていないローカルの変更を上書きするので注意してください。
git checkout stash -- .