web-dev-qa-db-ja.com

git stashの範囲を削除する方法は?

最新のものを除くすべての隠し場所をgit stash listから削除したいと思います。

例えば。単一のgitコマンドでstash1から3を削除したい:

stash@{0}: On master: Test related changes
stash@{1}: On master: Tets
stash@{2}: On master: Integrate bunyan logging and http2
stash@{3}: On master: Integrate bunyan logging and http2

私はこの答えをチェックしました https://stackoverflow.com/a/5737041/387894 、しかしそれは単一の隠し場所だけを削除するために適用可能です。 stashesの範囲を削除するgitコマンドはありますか?

15
Aditya Singh

簡単な答え:いいえ。

少し長い答え:いいえ、しかしそれは些細なことです。スタッシュ1、2、および3をドロップします。スタッシュ#1をドロップすると、スタッシュ2と3はそれぞれスタッシュ1と2になります。新しいスタッシュ#1をドロップすると、スタッシュ#2(元々は#3でした)がスタッシュ#1になります。したがって、#1から始めて3つのスタッシュをドロップするには、スタッシュ#1を3回ドロップするだけです。

18
torek

Stash 1から3を削除する場合は、シェルに移動して次のコマンドを入力します。

for n in {1..3}
do
git stash drop stash@{1}   
done

出力

Dropped stash@{1} (79f369e9c4ce8348af8bd2da63f384cc7d02655e)
Dropped stash@{1} (744d2fc40e25f2db1bdc182d41f6eb9134957df4)
Dropped stash@{1} (7f9989207a675549866ab1fc7b15082eb4161e9f)

Git stashはスタック構造を使用するため、n番目のインデックスをドロップするたびに、スタックインデックスは1ずつ減少します。したがって、最終的には、スタッシュ1から3をドロップすることになります。したがって、このように、長さnのスタッシュを次のように繰り返すこともできます。

for n in {1..n}
do
git stash drop stash@{1}   
done
16
majin

次のようなスクリプトを使用できる最初の隠し場所を除いて、すべての古い隠し場所を削除したいとします。

for (( ; ; ))
do
    git stash drop stash@{1}
    Result = $?
    if [ Result != 0 ] 
    then
      break
    fi
done

0
Melchia

ドロップされたスタッシュのインデックスもログに記録したい場合は、以下に示すように、降順と$nを使用できます。

for n in {3..1}; do git stash drop stash{$n}; done;

出力は次のようになります。

Dropped stash@{3} (beeaf3629b53d612b1a3fabb7b0c4f77d17e9b71)
Dropped stash@{2} (5a687ca9a93b3190882a9af2c15134e75f063f41)
Dropped stash@{1} (e33dfc42d03166def5dbb60baa975efb21b27f07)
0