@bentoloで述べたように、問題のあるファイルを手動で削除し、ブランチを切り替えてから、手動で追加し直すことができます。しかし、私は個人的には「git内」にとどまることを好みます。
これを行う最良の方法は、スタッシュをブランチに変換することです。ブランチになると、gitで通常のブランチ関連のテクニック/ツールを使用して、あなたが知っていて気に入っている通常の作業を行うことができます。これは実際には、リストされたエラーがない場合でも、スタッシュを操作するための有用な一般的な手法です。stashは実際には内部でのコミットであるため、うまく機能します(PSを参照)。
スタッシュをブランチに変換する
以下は、スタッシュが作成されたときにHEADに基づいてブランチを作成し、スタッシュを適用します(コミットは行いません)。
git stash branch STASHBRANCH
「stashブランチ」での作業
次に何をするかは、スタッシュとターゲットブランチ(ここではORIGINALBRANCHと呼びます)の現在の関係によって異なります。
オプション1-stashブランチを通常どおりにリベースする(stash以降の多くの変更)
ORIGINALBRANCHに多くの変更を加えた場合は、おそらくSTASHBRANCHをローカルブランチと同様に扱うのが最善です。STASHBRANCHでの変更をコミットし、ORIGINALBRANCHでリベースしてから、ORIGINALBRANCHに切り替えて、STASHBRANCHの変更をリベース/マージします。競合がある場合は、通常どおり処理します(このアプローチの利点の1つは、競合を確認して解決できることです)。
オプション2-stashに一致するように元のブランチをリセットします(stash以降の変更は制限されます)
ステージングされた変更をいくつか保持し、それからコミットしただけの場合は、追加した変更を取得するだけで、ステージングされていない場合は次のことができます。作業コピーを変更することなく、元のブランチとインデックスに戻ります。最終結果は、作業コピーの追加の隠し場所の変更になります。
git symbolic-ref HEAD refs/heads/ORIGINALBRANCH
git reset
バックグラウンド
Stashesはブランチ/タグのようなコミットです(パッチではありません)
PS、スタッシュをパッチとして考えるのは魅力的ですが(コミットをパッチとして考えるのと同じように)、スタッシュは実際には作成時のHEADに対するコミットです。適用/ポップするときは、現在のブランチにチェリーピックするのと同じようなことをしています。ブランチとタグは実際には単にコミットへの参照であるため、多くの点でスタッシュ、ブランチ、タグは、コミット(およびその履歴)を指すための異なる方法にすぎません。
作業ディレクトリを変更していない場合でも必要になる場合があります
PPS、-patchや--include-untrackedでstashを使用した直後に、このテクニックが必要になる場合があります。作業ディレクトリを変更しなくても、これらのオプションによってスタッシュが作成される場合があるため、元に戻すことはできません。その理由を完全に理解していないことを認めなければなりません。議論については、http://git.661346.n2.nabble.com/stash-refuses-to-pop-td7453780.htmlを参照してください。