Git stash がキャッシュされていません: ステージングされていない変更をすべて保存するにはどうすればよいですか? 質問する

Git stash がキャッシュされていません: ステージングされていない変更をすべて保存するにはどうすればよいですか? 質問する

Git によってバージョン管理されているプロジェクトで 2 セットの変更が行われたとします。1 セットはステージングされ、もう 1 セットはステージングされません。

プロジェクトをこの状態 (コミット前) で実行して、ステージングされた変更を再確認したいと思います。ステージングされていない変更をすべて削除し、ステージングされた変更だけを残す簡単な方法は何ですか?そのためには、ステージングされていない変更をプロジェクトから削除し、今後の作業のためにどこかに保存する必要があります。

これはgit stashコマンドに非常によく似ています。ただし、git stashステージングされていない変更とステージングされた変更の両方をプロジェクトから削除します。そして、のようなものは見つかりませんgit stash uncached

ベストアンサー1

更新2:
なぜこの回答について人々が不満を言っているのか分かりませんが、私の場合は完璧に機能しているようです。未追跡ファイルの場合はフラグを追加できます-u

完全なコマンドは次のようになりますgit stash --keep-index -u

git-stash以下はヘルプからの抜粋です

--keep-index オプションを使用すると、インデックスにすでに追加されたすべての変更はそのまま残されます。

--include-untracked オプションを使用すると、追跡されていないすべてのファイルもスタッシュされ、git clean でクリーンアップされ、作業ディレクトリが非常にクリーンな状態になります。代わりに --all オプションを使用すると、追跡されていないファイルに加えて、無視されたファイルもスタッシュされ、クリーンアップされます。

これがその様子を示す GIF です:

ここに画像の説明を入力してください

アップデート:

これは選択された回答ですが、[以下の回答](https://stackoverflow.com/a/34681302/292408)が正しいと指摘する人が多いので、確認することをお勧めします。

今日(2020 年 1 月 31 日)、git バージョンに対して回答を再度テストしました2.24.0が、まだ正しいと思います。追跡されていないファイルについて上記に小さなメモを追加しました。動作していないと思われる場合は、git バージョンも記載してください。

古い回答:オプションを使用する
--keep-index、インデックスにすでに追加されたすべての変更はそのまま残ります。

git stash --keep-index

からの文書化git-stash:

部分コミットのテスト

git stash save --keep-index作業ツリーの変更から 2 つ以上のコミットを作成し、コミットする前に各変更をテストしたい場合に使用できます。

# ... hack hack hack ...
$ git add --patch foo            # add just first part to the index
$ git stash save --keep-index    # save all other changes to the stash
$ edit/build/test first part
$ git commit -m 'First part'     # commit fully tested change
$ git stash pop                  # prepare to work on all other changes
# ... repeat above five steps until one commit remains ...
$ edit/build/test remaining parts
$ git commit foo -m 'Remaining parts'

しかし、ステージングされた変更のみを視覚的に確認したい場合は、difftool:

git difftool --cached

おすすめ記事