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