Git

【Git】コマンドでstashする・復元する・削除する方法【基本】

キーコマンド

Gitには色々な便利機能がありますよね。

私的によくお世話になる機能がstashです。
変更内容を一時保存できるので、急に別ブランチで作業をすることになった場合などに役立っています。

そんなstashですが、普段はVisual Studio Code(VSCode)でいじっているので、コマンドでのやり方ってどうだったっけ?と思うことがありました。

普段からコマンドを使っていないと、いざというときに忘れてしまうんですよね・・。

コマンドを覚えているとやっぱりいざというときに作業がスムーズなので、改めて方法を確認しました。
せっかくなので、記事にして備忘録にしようと思います。

参考にさせていただいたのは以下のサイトです。
プロジェクト管理ツールのBacklogが有名ですね。
参考:サル先生のGit入門 | 逆引きGit > Stash

そんなわけで、今回はGitコマンドでstashを操作する方法(stashする、復元する、削除する)についてご紹介しますね。

Gitコマンドでstashする方法

まずは一番の基本であるstashする方法です。
作業コピー上にコミット前の変更がある状態で、以下のコマンドを実行します。

$ git stash save

最後のsaveは省略できますので、以下でも同様にstash可能です。

$ git stash

さて、これでstashできましたが、後から見直した際に何の変更だったのかが分かった方が便利ですよね。
そんなときにはstashごとにメッセージを付与すれば良いでしょう。

$ git stash save “メッセージ”

saveの後ろにメッセージを渡してあげることで、stash内容が分かりやすくなります。

それでは一覧を見てみましょう。
一覧を見る場合はlistでOKです。

$ git stash list
stash@{0}: On master: “メッセージ”
stash@{1}: WIP on master: 4547abc {この時の最新コミットメッセージ}

最新のstashほど、数字が小さくなります。
今回は1回目がメッセージなしでのstash、2回目がメッセージありのstashでしたので、上のような表示になっています。

メッセージを付与した方が一目で内容が分かりますよね。

一方でメッセージなしの方は、その時作業していたブランチの最新コミットメッセージが表示されます。

どの時点のブランチで作業していたのかは分かりますが、どのような作業をしていたのかは分かりません。
この場合はstashを適用して中身を確認しなければ分からないので、一手間増えてしまいます。

stashが増えてくると探すのも一苦労なので、stashする際はメッセージをつけるようにした方が良いでしょう。

Gitコマンドでstash内容を復元する方法

stash内容を復元する場合は2種類の方法があります。
1つは最新のstashを復元する場合、もう1つは最新よりも前のstashを復元する場合です。

最新のstashを復元する場合は以下のコマンドでOKです。

$ git stash pop

このようにすると最新のstashが復元されます。

最新以外のstashを復元する場合は以下のように引数を渡してあげます。

$ git stash pop stash@{1}

stash@{}の{}の中に入る数字はlistで一覧を見た際に表示される数字と同じです。

例えば、 以下のような一覧があったとします。

$ git stash list
stash@{0}: On master: “スタイルを変更”
stash@{1}: On master: “初期化処理を修正”
stash@{2}: WIP on master: 4547edf {この時の最新コミットメッセージ}

ここで上から2番目にある「”初期化処理を修正”」というstashを復元する場合は、stashの番号が「stash@{1}」となっているので、以下のようにすればOKです。

$ git stash pop stash@{1}

Gitコマンドでstash内容を削除する場合

stashは便利ですが、ほったらかしにしておくと、使わなかった不要なstashが残ってしまいます。

一覧を表示した際に不要なstashばかりが表示されると、目的のstashを探すのも一苦労ですので、いらなくなったstashは削除してしまいましょう。

stashを削除する方法は、stashを復元する方法とよく似ています。
最新のstashを削除する方法は以下のコマンドとなります。

$ git stash drop

これで最新のstashが削除されます。

最新以外のstashを削除する場合は以下のように引数を渡してあげます。

$ git stash drop stash@{1}

stash@{}の{}の中に入る数字はlistで一覧を見た際に表示される数字と同じです。

例で確認してみましょう。
まずは一覧を表示します。

$ git stash list
stash@{0}: On master: “コメントを修正”
stash@{1}: On master: “認証処理を仮実装”
stash@{2}: WIP on master: 4547edf {この時の最新コミットメッセージ}

今回はstash@{1}の「”認証処理を仮実装”」というstashが不要となったと仮定して削除してみます。

$ git stash drop stash@{1}
Dropped stash@{1} (ハッシュ値)

それではもう一度stashの一覧を見てみましょう。

$ git stash list
stash@{0}: On master: “コメントを修正”
stash@{1}: WIP on master: 4547edf {この時の最新コミットメッセージ}

先ほど表示されたstash@{1}は「”認証処理を仮実装”」という内容でしたが、今は無くなっています。
代わりに、先ほどのstash@{2}がstash@{1}になっていますね。

これはstash@{1}が削除された結果、もともとのstash@{2}が繰り上がった結果です。

このようにして不要なstashはどんどん削除していくのが良いと思います。

終わりに

今回はGitコマンドでstashを操作する方法(stashする、復元する、削除する)についてご紹介しました。

内容をまとめると以下のようになります。

まとめ
  • stashする ==> git stash save “メッセージ”
  • stashの一覧を見る ==> git stash list
  • stashを復元する ==> git stash pop stash@{1}
  • stashを削除する ==> git stash drop stash@{1}

今回はここまでです。それでは。