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 です:
アップデート:
今日(2020 年 1 月 31 日)、git バージョンに対して回答を再度テストしました2.24.0
が、まだ正しいと思います。追跡されていないファイルについて上記に小さなメモを追加しました。動作していないと思われる場合は、git バージョンも記載してください。
古い回答:オプションを使用する
と--keep-index
、インデックスにすでに追加されたすべての変更はそのまま残ります。
git stash --keep-index
部分コミットのテスト
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