Open3

git stash に数字のみのコミットハッシュを指定するとどうなるか

へきしんへきしん

git stash pop等で指定できるオブジェクトは以下の 3 種類である。

  • stash@{0}のような reflog セレクター
  • 上記の{}の中の数字部分(インデックス)
  • stash が指す commit ハッシュ

疑問

7 桁の短い commit ハッシュが数字のみで構成されており、stash がその数以上あるとき、コマンドで commit ハッシュを指定したらインデックスと commit ハッシュどちらが優先されるののだろうか。つまり、(stashが指す)commit ハッシュが1000000かつ stash が 1,000,001 件以上(stashが0始まりなので)だったときに commit ハッシュ1000000が優先されるのか、1,000,001 件目の stash が優先されるのか。

へきしんへきしん

手元にちょうどハッシュが数字のみで構成された stash commit があったため、とりあえず stash の数は少ないままで試してみた。

(最後の実行は実際に commit ハッシュを指定できることの確認)
実行した結果、数字のみで構成された commit ハッシュの内容は表示されず、以下のエラーが表示された。

fatal: log for 'refs/stash' only has 7 entries

このエラーメッセージだけ見ると commit ハッシュよりインデックスが優先されているようである。

へきしんへきしん

十分な数の stash がある場合でも結果は変わらないと思うが(stash が少ないときはインデックス優先、stash が十分あるときはハッシュ優先なんて実装だったら最悪なので結果は変わらないでほしい)、実際に stash を十分に用意して試そう。と思ったが stash 1,000 件の作成に1分位かかるので断念した。git のソースコードを読めば良いのかもしれないが面倒だし、C 言語は読めない。