git stash でコンフリクトした際に戻すには git reset --merge する

結論

標題のとおりです。

$ git stash --abort を誰もが一度は即座に実行するかと思いますが、そういうオプションは今のところ無いので、$ git reset --merge で戻します。

補足

$ git stash pop を実行した結果コンフリクトしたとします。

その後に $ git reset --merge を実行することで $ git stash pop は無かったことになりますが、その場合、stash はちゃんと元に戻っています*1

考察

$ git stash をするとき、どうしてもタイプ数を抑えたいので $ git stash --save "名前" をしないことが多いです。が、そうすると stash がたまりまくってしまい、どれがどれだか分からなくなってしまいます。

stash は原則必ず戻すもの、という考えが守られていれば $ git stash pop が適宜適切に行われ、$ git stash list はいつも空になります。

が、そううまくはいかないもので、stash して寝て次の日になって、さらにそれを繰り返して、ということをしていると、ある日よく分からない大量の stash が $ git stash list にてお目見えすることになります。

面倒でも $ git stash --save "名前" をするのがよさそうです。あとはこまめに stash を掃除してあげたほうがよさそうです。

参考

stackoverflow.com

*1:コンフリクトの解消はできたけど stash のデータが消えた、ということにはならない

Powered by はてなブログ