🧊

Gitのstashについてのメモ

検索すればなんでも出てくるけど、自分の言葉でメモしておきたいので。

git stash

branch変えたい、とりあえずあるだけpushしたい、pullしたい云々あった場合、今の変更をとりあえず保存しておけるのがこのstashというコマンド。

全てではないけども、だいたいよく使いそうなものをメモ。

一通りの使い方

git stash save

して脇に避けた変更は、

git stash pop

で元に戻せる。

popと同じく変更を戻すコマンドには、

git stash apply

というのもある。

実は、pop = apply + dropのこと。

popとapplyの違いは、変更を戻して、stashを使い捨てるか、apply:適応=変更を戻すだけか。

ちなみに、

git stash
# git stash saveと同じ

もひとつちなみに、stashは何回でもできるので、

git stash list

とするとstashの履歴が見れる。

ということはつまり、

git stash pop stash@{0}

のようにすればどのstash分を元に戻すかが選べる。

もう言うまでもないけど、

git stash apply
# git stash apply stash@{0} 同じ動作

どのstashかを指定しない=先頭(0番目)が指定される。

で、popじゃなくてapplyばっかりしてると、この履歴が残りっぱなしになるので、

git stash drop stash@{0}

とかして消す。

git stash clear

とすると、全部の履歴を消すこともできる。

ふと思ったけど、pushする前にpull --rebaseした方がいいよってのと一緒で、実はpopじゃなくてapply & dropにした方が何かと良いのではなかろうか。

そのほか

git stash pop

このときコンフリクトが起きた場合、pop=履歴消えるが失敗して、both modifiedなファイルが出る。

いつも通り修正して、修正が終わったなら、

git stash drop

うん、やっぱpop使わない方が良い気がしてきた。

popに失敗した=stashに預けてた変更はどこまで反映されたのかと不安になってたけど、mergeされた結果コンフリクトが起きたというのであれば、基本的には何かしらの形で反映されたと思って良さそう。