2016-12-22 8 views
2

時々私はgit stashを使用して、私が再訪したいと思うスパイクや実験をすばやく取り除きます。多くの時間、私はそれらを再訪しないで、私の隠れリストは汚染されます。特定の隠しを除いて、git stashをクリアします

私はgit stashのすべてを特定の隠しを除いて削除したいと思います。

例:私のgit stash listは次のようになります。

[email protected]{0}: On test-branch: try something 
[email protected]{1}: WIP on spiked-branch: 2cc4751 another spike attempt 
[email protected]{2}: On master: 2cc4751 experimental refactoring 
[email protected]{3}: WIP on spiked-branch: 3ccfc4d first spike attempt 

私はちょうど[email protected]{2}を維持したいと思います。これを行う簡単な方法はありますか?

私は、次の手順を取ることによって私の結果を達成することができます知っている:

git reset --hard origin/master #=> ensure I have clean branch 
git stash pop [email protected]{2} #=> put stash on current branch 
git stash clear #=> clear all stashes 
git stash #=> re-stash what I popped in step 2 

これは退屈そうです。より効率的な方法がありますか?

+0

これはあなたの解決策です。 http://stackoverflow.com/questions/16861982/how-to-cherry-pick-from-stash-in-git –

+1

@AnthonyC Hmm私はそうは思わない。私は 'git cherry-pick'を実行しようとしているわけではないので、全体の隠れ家はタクトと私の' git stash list'にとどまるべきです。 – farisj

答えて

2

コマンドをスクリプトに入れるのは、あまり面倒ではありません。ここで私はそれをより強固にするためにいくつかの変更と、それを行っている:あなたのバージョンから

#!/bin/sh 

git reset --hard HEAD && git stash pop [email protected]{$1} && git stash clear && git stash 

変更:

  1. 使用HEAD代わりにブランチ名の、あなたが予想外に移動しないように、分岐ポインタ。
  2. 最初の引数に基づいてポップするスタックを選択します。
  3. &&を使用すると、コマンドが失敗しても次のコマンドに続行したくない可能性があります。

その後、例えばとして、それを呼び出すことができます。

git alias.clear-except "! git reset --hard HEAD && git stash pop [email protected]{$1} && git stash clear && git stash" 

:あなたが代わりに隠し番号2

を保存したい

mystashclear.sh 2 

は、あなただけのエイリアスを使用することができますそして再びあなたはそれを次のように使うことができます:

git clear-except 2 
+1

これは素晴らしいアイデアです。ありがとう! – farisj

関連する問題