すべてのGitスタッシュを一度に削除するにはどうすればよいですか?


1406

すべてのGitスタッシュを一度に削除するにはどうすればよいですか?

具体的には、1つのコマンドを入力します。

回答:


2462

次のコマンドは、すべてのスタッシュを削除します。

git stash clear

gitドキュメントから:

clear

隠された状態をすべて削除します。

重要な警告:これらの状態はプルーニングの対象となり、回復できない場合があります(...)。


13
なぜgit stash dropをしないのですか?
user20358

137
@ user20358:(stash drop" stashリストから単一のstash状態を削除します。<stash>が指定されていない場合、最新のものを削除します。(...) ")は質問に答えません( " すべて削除方法私のGitはすぐに隠れる? ")?
Tadeck

11
-その答えを受け入れたものに加えて言及したgit stash clear全てクリアし、使用している場合を確認するために、 -git stash list
カマル

2
@ jedd.ahyoungこれにはさらに1,000の賛成票が必要です。のドキュメントgitを見つけるのは事実上不可能です!git-scm.com/docs/git-stash
Drenai

11
@ライアン:git help <command>ドキュメントを取得するための最良の方法です(そして、実際にはかなり良い方法です)。この場合、その行為をgit help stash明確に示してgit stash clearください(これが私が最初にSOに来て回答を支持することを妨げなかった...しかし、それはgit:D よりも私についてあなたに多くを伝えます)
Marco Massenzio

46

スタッシュを削除するには2つの方法があります。

  1. 特定のスタッシュが不要になった場合は、次の方法で削除できます$ git stash drop <stash_id>
  2. 次のコマンドを使用して、すべてのスタッシュをリポジトリから削除できます$ git stash clear

両方を注意して使用してください。一度削除したスタッシュを元に戻すのは難しい場合があります。

こちらが参考記事です。


2
端末を閉じることはそれとは何の関係もありません。gitはデーモンではありません。呼び出すときにのみ実行されます。ターミナルを閉じたとは思いません。
DylanYoung

31

このコマンドを使用すると、すべての隠された変更を確認できます。

git stash list

これは次のコマンドです。これを使用して、隠された変更をすべてクリアします

git stash clear

隠された変更の1つを隠し領域から削除したい場合

git stash drop stash@{index}   // here index will be shown after getting stash list.

注:git stash listgitのstash領域からインデックスを取得できます。


少なくともWindows 10を使用するVSCodeの統合ターミナルではgit stash drop 'stash@{index}'、アポストロフィを使用することを言及する価値があります。
OriolMiró

13

最近の隠し場所をいくつか残したいが、それ以外はすべて削除したかった。

スタッシュを1つ落とすと、すべてのスタッシュの番号が付け直されるため、これは実際にwhileで簡単に実行できます。stash @ {19}より古いすべてのstashを削除するには:

while git stash drop 'stash@{20}'; do true; done

これはGit 2.11で導入されたインデックス値に適用されますgit stash pop 3か?代わりにスタッシュリストから3番目のスタッシュを参照できますか?whileループを使用して、インデックス値を使用してスタッシュをドロップできるかどうかを知りたいと思いました。
tom_mai78101

私はこれのシンプルさ、素晴らしいエレガントなソリューションが大好きです!
ドミニク

3

ほんの少しのスタッシュを削除する必要があるような別の要件がありました。その場合、以下のコードが役立ちます。

#!/bin/sh
for i in `seq 5 8`
do
   git stash drop stash@{$i}
done

/ * 5から8のインデックスから削除します* /


試してみるfor iterator in `seq 5 8`; git stash drop stash@{$iterator}; done
Chris McCowan

3
ドロップすると、残りのスタッシュが1スポット上に移動することに注意してください。したがって、5から8まで削除する場合は、逆算するか、stash @ {5}を4回削除する必要があります。例: for i in `seq 4`; do git stash drop 'stash@{5}'; done
ワープ

@ChrisMcCowanコードにも欠落がありますdo
steezeburger

3

最新の隠し場所または特定のインデックスで削除したい場合 -

git stashドロップtype_your_index

> git stash list

  stash@{0}: abc
  stash@{1}: xyz
  stash@{1}: pqr

> git stash drop 0

  Dropped refs/stash@{0}

> git stash list

  stash@{0}: xyz
  stash@{1}: pqr

すべての隠し場所を一度に削除したい場合 -

> git stash clear
>

> git stash list
>

警告:一度完了すると、元の場所に戻すことはできません


1

40日以上経過したすべてのスタッシュを削除するには、以下を使用します。

git reflog expire --expire-unreachable=40.days refs/stash

追加--dry-runして、どのスタッシュが削除されたかを確認します。

説明と詳細については、https://stackoverflow.com/a/44829516/946850を参照してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.