734

Git stash は、スクリプトを作成するのが少し難しいことを除いて、私が望む多くのことをgit stash; git stash pop行うようです。変更がない場合は、リポジトリに変更がある場合とは異なることを行うからです。

それがgit stash createその問題に対する答えのようで、1 つのことを除いてすべてが機能します... 作成された隠し場所を取り除くことができません。スタッシュを取り除く方法はありますか?

私がやっていることを100%明確にするために:

スタッシュを作成します。

~/tmp/a(master) $ git stash create 
60629375d0eb12348f9d31933dd348ad0f038435
~/tmp/a(master) $ git st
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   new file:   b
#
~/tmp/a(master) $ git reset --hard
HEAD is now at 555d572 log message

スタッシュを使用します。

~/tmp/a(master) $ git apply 60629375d0eb12348f9d31933dd348ad0f038435
fatal: can't open patch '60629375d0eb12348f9d31933dd348ad0f038435': No such file or directory
~/tmp/a(master) $ git stash apply 60629375d0eb12348f9d31933dd348ad0f038435
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   new file:   b
#

隠し場所を削除します: (この最後のビットが機能しないことを除いて)

~/tmp/a(master) $ git stash drop !$
git stash drop 60629375d0eb12348f9d31933dd348ad0f038435
'60629375d0eb12348f9d31933dd348ad0f038435' is not a stash reference
4

10 に答える 10

1009

git stash dropパラメータを取りません - これは一番上の stash を削除します - または次のような stash 参照:削除する stashstash@{n}n指定します。にコミット ID を渡すことはできませんgit stash drop

git stash drop            # drop top hash, stash@{0}
git stash drop stash@{n}  # drop specific stash - see git stash list

スタッシュをドロップすると、スタックのさらに下にあるすべてのスタッシュの指定が変更されます。stash@{n}

stash createスタッシュを使用している場合、「スタッシュ」用にエントリが作成されていないため、ドロップするものがないため、スタッシュをドロップする必要があると考える理由がわかりません。

于 2011-04-20T21:48:57.777 に答える
571

で作成された通常のスタッシュを削除するには、またはgit stashが必要です。詳細については、以下を参照してください。git stash dropgit stash drop stash@{n}


で作成された stash を削除する必要はありませんgit stash create。ドキュメントから:

stash エントリ (通常のコミット オブジェクト) を作成し、ref 名前空間のどこにも保存せずに、そのオブジェクト名を返します。これは、スクリプトに役立つことを目的としています。おそらく、使用したいコマンドではありません。上記の「保存」を参照してください。

stash コミットを参照するものがないため、最終的にガベージ コレクションが行われます。


git stashまたはで作成された stashgit stash saveは に保存されrefs/stash、 で削除できますgit stash dropgcすべての Git オブジェクトと同様に、実際の stash の内容は、有効期限が切れた後 (デフォルトは 2 週間後) にそれらのオブジェクトが整理されるまで、コンピューターから削除されません。

refs/stash 古いスタッシュはreflogに保存され( try cat .git/logs/refs/stash)、 で削除できます。git stash drop stash@{n}ここで、nは で示される番号git stash listです。

于 2011-04-20T21:49:12.367 に答える
244

隠し場所が 1 つだけであることが 100% 確実な場合、またはすべての隠し場所を削除したい場合( git stash list107% 確認してください)、次の操作を実行できます。

git stash clear

..そしてそれらを忘れてください(すべての隠し場所を削除します)。

注:すべてをクリアする方法を探してここにたどり着いた人(私のように)のために、この回答を追加しました。

于 2014-08-29T21:09:44.420 に答える
87

git ドキュメントから: http://git-scm.com/docs/git-stash

ドロップ [-q|--quiet] []

stash リストから単一の stashed ステートを削除します。no を指定すると、最新のものを削除します。つまりstash@{0}、それ以外の場合は、stash@{} の形式の有効な stash ログ参照でなければなりません。

例:

git stash drop stash@{5}

これにより、スタッシュ エントリ 5 が削除されます。スタッシュのすべてのリストを表示するには、次のようにします。

git stash list
于 2015-04-22T17:53:03.980 に答える
72

あなたが使用している必要があります

git stash save

そしてそうではない

git stash create

これは、stash (通常のコミット オブジェクト) を作成し、ref 名前空間のどこにも保存せずに、そのオブジェクト名を返すためです。したがって、stash apply ではアクセスできません。

git stash save "some comment"別のブランチにレプリケート/移動したいステージングされていない変更がある場合に使用します

git stash apply stash@{0}保存した (隠した) 変更を現在のブランチに反映させたい場合は、(保存した隠し場所のインデックスが 0 であると仮定して)使用します。

git stash listすべてのスタッシュ インデックスをチェックするためにいつでも使用できます

git stash drop stash@{0}特定のスタッシュを削除するには、(保存されたスタッシュ インデックスが 0 で、それを削除したいと仮定します) を使用します。

于 2011-11-03T07:40:48.713 に答える