【覚書】git stash

プログラミング


スポンサーリンク

作業用のファイルを一時退避したい

偶然、今日そんな場面に出くわしました。

あれ? テスト通らない。変更前ってテストOKしてたっけ?

このような場合、変更を元に戻すしかないように思えるのですが、stashを使えば、編集中のファイルを一時退避することができるようです。

git stash

本当はstashの後にsaveもいるらしいのですが、省略可能ということなので省いています。

stashを試す

実際にやってみます。

変更中

stash前

変更ファイルがある

stash後

stashした

変更がなくなった。これで変更前のソフトでテストを実施できる。

stashを戻す

確認が終わったので、stashしたものを元に戻したい。

git stash apply stash名

とすればよいみたいなのですが、stash名が分からない(stashしたときに出ていない)。

stash名を調べる

git stash list

でstashしている物のリストが見られるようです。

git stash list

2つある。stashしたときのブランチ名(括弧の名前)から、stash@{0}の方と分かる。これをさっきのstash名に当てはめれば良さそう。

git stash apply stash@{0}

復元されたみたい。

stash apply

apply時に出る表示はgit statusしたものと同じようす。

余談)何を変更したのか知りたい場合

今回はブランチが違ったのでどっちか判別つきましたが、判別しにくい場面も考えられるわけで・・・

stashの内容を確認する

git stash show stash名

でstash名の変更内容を確認できるみたいです。早速試してみた。

stash show

変更したファイルとその量がでるみたいですね。

stashしたものを消す

前回stashしたものが残っていた(1度applyしている)ようなので、apply時に消えないみたいですね。

stashを消す

git stash drop stash名

早速消してみます。

stash drop

stash@{0}が消えて、stash@{1}がstash@{0}になりました(stashしたブランチ名から判断)。

元に戻したときに一緒に消す

git stash pop stash名

applyじゃなくてこっちにすればよかったみたいですね。

まとめ

コマンドは以下

  • 退避したい場合は単純にgit stash
  • stashを元に戻すにはgit stash apply stash名
  • stashを元に戻してstash自体は削除する場合はgit stash pop stash名
  • stashを削除するにはgit stash drop stash名
  • stashが名前やどれだけあるのかを確認するにはgit stash list
  • stashの中身を確認するにはgit stash show stash名

編集後記

今回貼り付けた画像はAWS(Amazon Web Service)のCloud9でやっている画像なのですが、見事に自分のユーザ名が間違っていたのに気がついた。GitHubで使っているblatankをAWSでも使おうとしたら、bltankになっている(lのあとのaが抜けている)。
道理で何度か認証が通らないわけだ。blatankでパスワード入れてもなあ・・・そんなユーザーいねえよ。。。