【覚書】git stash
スポンサーリンク
作業用のファイルを一時退避したい
偶然、今日そんな場面に出くわしました。
あれ? テスト通らない。変更前ってテストOKしてたっけ?
このような場合、変更を元に戻すしかないように思えるのですが、stashを使えば、編集中のファイルを一時退避することができるようです。
変更を一時的に退避!キメろgit stash – Qiita
gitは、とにかくトピックブランチを作成して作業する。だいたい機能追加とかバグ修正とかの単位でブランチを作って作業します。(ちゃんとやってますよね?)
なので、作業の途中で別の修正を優先してお願いっ!なんて言われたときは、別のブランチ…
git stash
本当はstashの後にsaveもいるらしいのですが、省略可能ということなので省いています。
stashを試す
実際にやってみます。
変更中
変更ファイルがある
stash後
変更がなくなった。これで変更前のソフトでテストを実施できる。
stashを戻す
確認が終わったので、stashしたものを元に戻したい。
git stash apply stash名
とすればよいみたいなのですが、stash名が分からない(stashしたときに出ていない)。
stash名を調べる
git stash list
でstashしている物のリストが見られるようです。
2つある。stashしたときのブランチ名(括弧の名前)から、stash@{0}の方と分かる。これをさっきのstash名に当てはめれば良さそう。
git stash apply stash@{0}
復元されたみたい。
apply時に出る表示はgit statusしたものと同じようす。
余談)何を変更したのか知りたい場合
今回はブランチが違ったのでどっちか判別つきましたが、判別しにくい場面も考えられるわけで・・・
stashの内容を確認する
git stash show stash名
でstash名の変更内容を確認できるみたいです。早速試してみた。
変更したファイルとその量がでるみたいですね。
stashしたものを消す
前回stashしたものが残っていた(1度applyしている)ようなので、apply時に消えないみたいですね。
stashを消す
git stash drop stash名
早速消してみます。
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でパスワード入れてもなあ・・・そんなユーザーいねえよ。。。