web-dev-qa-db-ja.com

Git stash uncached:ステージングされていない変更をすべて整理する方法は?

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

この状態(コミット前)でプロジェクトを実行して、段階的な変更を再確認したいと思います。 ステージングされていないすべての変更を片付けて、ステージングされたままにする簡単な方法は何ですか?したがって、ステージングされていない変更がプロジェクトから消える必要があります。

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

69
klm123

更新:
これは選択された回答ですが、多くの人が 以下の回答 が正しいものであることを指摘しています。チェックアウトすることをお勧めします。

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

git stash --keep-index

git-stashのドキュメント から:

部分的なコミットのテスト

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

# ... 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
75

受け入れられた答えはまた、いくつかの指摘があったように段階的な変更を隠し、追跡されていないファイルを隠しません。ステージングされた変更をスタッシュで取得せずに、追跡されていないファイルを削除してスタッシングする方法を次に示します。

アイデアは、ステージングされた変更の一時的なコミットを行い、ステージングされていない変更を隠してから、一時的なコミットをコミット解除することです:

# temp commit of your staged changes:
$ git commit --message "WIP"

# stage your previously unstaged files before stashing (so you get untracked files):
$ git add .

$ git stash

# now un-commit your WIP commit:
$ git reset --soft HEAD^

この時点で、ステージングされていない変更のスタッシュがあり、作業コピーにステージングされた変更のみが存在します。

65
stephen.hanson

ステージングされていない変更だけを本当に隠しておくものが必要だったので、マークされた答えは私には役に立たなかったことがわかりました。マークされた回答git stash --keep-indexは、ステージングされた変更とステージングされていない変更の両方を隠します。 --keep-index部分は、単に作業コピーでもインデックスをそのまま残します。それはOPではうまくいきますが、それは彼が実際に答えを望んだのとは少し異なる質問をしたからです。

ステージングされていない変更をスタッシュする唯一の方法は、スタッシュをまったく使用しないことです。

git diff > unstaged.diff
git apply -R unstaged.diff

git checkout -- .の代わりにapply -Rも機能します。

作業作業作業...

git apply unstaged.diff
rm unstaged.diff
15
Binary Phile

Git:ステージングされていない変更を隠します

これにより、git add以外のすべての変更が隠されます。

git stash -k

-uスイッチも使用しない限り、新しく作成された(および追加されていない)ファイルは作業ディレクトリに残ることに注意してください。

git stash -k -u 

また、後でgit stash popを実行するとき、作業ディレクトリはクリーンでなければなりません(つまり、すべての変更を追加する必要があります)。

http://makandracards.com/makandra/853-git-stash-unstaged-changes

3
Cory Danielson