検索すればなんでも出てくるけど、自分の言葉でメモしておきたいので。
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された結果コンフリクトが起きたというのであれば、基本的には何かしらの形で反映されたと思って良さそう。