git stashについて

git stashを好んで使うのですが、原理がわかっておらず、混乱しました。

あ、git stashは現在のブランチで変更を一旦避難するものです。

  • git stash使用
  • 別のブランチでもgit stash使用
  • 最初のgit stashをしたブランチでgit stash pop使用
  • あれ、最初のじゃない・・・

この原因は、git stashを積み重ねていくと、最後にgit stashをしたものがどんどん最新になっていくからなんですね。

つまり、前のgit stashをしたものはそれに合わせて呼び出してあげないといけません。

$ git stash list

これは今までのgit stashして残っているリストを出してくれます。

stash@{0}: WIP on hoge-hoge: 2f06033 Merge pull request #2680 from hoge/hoge
stash@{1}: WIP on hoge: 40a93c8 Merge pull request #2675 from hoge/hoge
stash@{2}: WIP on hoge: beafe7a Merge pull request #2665 from hoge/hoge

ここでstash@{1}の中身を確認したい場合です。

git stash show

これで変更したファイルがわかります。

$ git stash show stash@{1}

Gemfile                                                |  1 +
 Gemfile.lock                                           |  9 +++++++++
 app/models/user.rb                                     |  2 ++
 config/routes.rb                                       |  2 ++
 db/seeds.rb                                            |  7 +++++++
 test/models/user_test.rb                               | 11 +++++++++++

中身を見る場合は、$ git stash show -p stash@{1}でgit diffと同じような形で見れます。

最後に取り出したいstashを指定します。

git stash apply

$git stash apply stash@{1}でほしいものを取り出します。

git stashを使わないと生きていけない体なので、ちゃんと使い方を覚えないとな。