たくさんのファイルが入った隠し場所があります。
しかし、ファイルが競合しているため、スタッシュを適用できません。隠し場所で問題のあるファイルを特定したので、それを削除します。
すべてを破壊せずに、スタッシュから単一のファイルを削除するにはどうすればよいですか?
スタッシュはコミット(または実際には2回、場合によっては3回のコミット)であり、コミットを変更することはできません。あなたの質問に対する文字通りの答えは、「できない」です。幸いなことに、あなたはneedをしません。
ファイルが競合しているため、スタッシュを適用できないと言います。しかし、あなたはcanを適用すると、単にマージの競合が発生します。必要なのは、マージの競合を解決することだけです。
競合がファイルREADME.txt
にあるとしましょう。ちょうどここに何か書いておくことがあります。
ブランチ上バージョンを保持して解決する場合は、スタッシュを適用し、ブランチ上バージョンをチェックアウトして競合を解決します。
git stash apply
git checkout --ours -- README.txt # or git checkout HEAD -- README.txt
インスタッシュバージョンを保持する場合は、そのバージョンを抽出します。
git checkout --theirs -- README.txt # or git checkout stash -- README.txt
または、古いマージ解決ツールを使用して(テキストエディターを使用します)、結果を "git add"します。
スタッシュがすべて完了すると、git stash drop
はスタッシュを構成するコミットを「忘れ」ます。 (これが完了したと確信するまで、これを行わないでください。後で戻すのは非常に困難です。)
この状況には回避策があります。
stashをパッチファイルとして保存します。
$ git stash show -p > stash.patch
競合をスキップして、このパッチを適用します(競合の解決を求められます。欠落しているファイルをスキップするだけです)。
$ patch -p1 < stash.patch
stash.patch
を後でクリーンアップすることを忘れないでください!
ローカルコードベースから必要なファイルを削除し、それをプッシュして隠します。変更が反映され、ファイルがstashから削除されます。