1. ホーム
  2. git

[解決済み] git stash create で作成した stash を削除するにはどうすればよいですか?

2022-03-14 06:52:44

質問

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

解決方法は?

で作成した通常のスタッシュを削除するには git stash が必要です。 git stash drop または git stash drop stash@{n} . 詳しくは下記をご覧ください。


で作成したスタッシュは削除する必要はありません。 git stash create . docsより。

スタッシュエントリ (これは通常のコミットオブジェクトです) を作成し、そのオブジェクト名を、ref 名前空間のどこにも保存せずに返します。これはスクリプトで使用することを想定しています。おそらく、あなたが使いたいコマンドではないでしょう。

スタッシュコミットには何も参照されないので、いずれガベージコレクションされるでしょう。


で作成されたスタッシュは git stash または git stash save に保存されます。 refs/stash で削除することができます。 git stash drop . すべての Git オブジェクトと同様に、実際の stash の中身は gc は、それらのオブジェクトが期限切れになった後にプルーンします (デフォルトは 2 週間後)。

古いスタッシュは refs/stash リフロ (試しに cat .git/logs/refs/stash で削除することができます。 git stash drop stash@{n} ここで n が示す数値です。 git stash list .