変更を一時的に退避しよう!git stashを使いこなす5つのステップ

みなさんこんにちは。フリーランスプログラマーのsatoです。

開発に集中していたのに、急遽対応しなければならない別の修正が上がってくることもありますよね。しかし集中し開発していた内容が、まだコミットするほどに、まとまっていない状況だったら…。どうしようか迷ってしまうところだと思います。

しかしご安心を。gitには「stash」という、変更を一時的に退避することができる便利な機能が存在します。今回はそんなstashについて、実践的な使い方を見ていきましょう。

  • [基本]stashとは
  • [基本]stashを使うための5ステップ
  • [応用]stashをもっと活用しよう!
  • [応用]コンフリクトしたときは!?

5ステップで、実践的な使い方を一通りマスターしましょう。そのあとは、退避した処理と現行処理の差分の取り方など、応用的な内容を見ていきましょうか。それではよろしくお願いいたします。

目次

stashとは

stashを一言で説明すると「変更を一時退避する処理」と言えるでしょう。主に、まだコミットはしなくない修正を、一時退避するために使われます。

使い方は非常に簡単です。

git stash [実行コマンド]

このように「git stash」に続けて、行いたいコマンドを指定するだけです。

例えば「git stash save」や「git stash list」といった感じですね。具体的にどんなコマンドがあるかや、どう使うかは実例を通して見ていきましょう。

stashを使うための5ステップ

では早速見ていきます。

現在、変更中の内容があるが、コミットできる状況ではない…

そんな状況で、stashを使用する例を見ていくことにしましょう。

①「git stash save」で退避!

では、早速一時退避を行ってみましょう!

git stash save

これだけです!stash saveを指定するだけで保存が可能です。

しかし、これだと一点問題が残ります。stashの保存時の名称は「stash@{0}」など機械的なものになってしまうためどのstashがどの退避なのか、非常にわかりづらくなります。そのためsaveする際には必ずメッセージを残しましょう

saveコマンドの後ろにメッセージをつけることで保存するデータにメッセージをつけることができます。

git stash save "任意のメッセージ"

このメッセージは、必ず設定しておきましょう。また今回は、以下のように「一時退避」というメッセージをつけたとして、続きを進めましょう。

git stash save "一時退避"

②「git stash list」で退避を確認!

ではちゃんと保存されているか確認しましょう!

確認はstash listコマンドです。

git stash list

このコマンドでは、保存されているstashを一覧表示できます。

実行時には以下のように情報が出力されます。

「stash@{番号}」: On 「ブランチ名」: 「メッセージ」

先ほどのsaveを実行した後に、listを実行すると以下のように表示されるでしょう。

stash@{0}: On master: 一時退避

ちゃんと保存されているのが確認できたら一安心です!

③作業を済ませる

データの退避が確認できたら、もう安心です。急遽発生した作業を消化してしまいましょう。

④「git stash apply」で復旧作業!

作業が済んだら、一時退避した処理を復旧しましょう。

復旧には「stash applyコマンド」を使います。

git stash apply 復旧したいstash名

applyの後ろには、復旧したいstash名をつけましょう。

※ちなみに名前を省略すると、一番最新のstashを復旧します。stash名は先ほど学んだ「git stash list」で取得できます。仮に復旧したいstash名が「stash@{0}」だったとしたら、以下のようにコマンドを打ちましょう。

git stash apply stash@{0}

⑤「git stash drop」で退避データを削除!

復旧が無事完了したら、退避しているデータは削除しておきましょう。「stash drop コマンド」で削除が行えます。

git stash drop stash@{0}

※こちらも名前を省略すると、一番最新のstashを削除します。注意しましょう。削除して、後片付けまで終わればひと段落です!

stashをもっと活用しよう!

ここからはstashの応用的な使い方を見ていきましょう。

変更差分を調べるなら「git diff」

現在stashしている内容を、確認したい時があると思います。その時はdiffコマンドを使用しましょう。

以下のようにstash名を指定すれば、現在の内容との差分が表示されます。

git diff stash@{0}

また「–name-only」オプションをつけることで、変更のあるファイル名のみ探すことも可能です。

git diff --name-only stash@{0}

あとは、最後にファイル名を指定することで、指定ファイルの差分のみ表示することが可能なのも覚えておきましょう!

git diff stash@{0} ファイル名

applyとdropを同時に!「git stash pop」

「stash popコマンド」を使用することで「apply」と「rop」コマンドを同時に行うことができます。

git stash pop stash@{0}

復旧と削除が同時に行えるため、覚えておくと便利です。

コンフリクトしたときは!?

プログラムに修正をかけている最中に、stashを復旧した場合などにコンフリクトが起きることがあります。コンフリクトの解消については、マージの記事にまとめていますので、学んでおくことをお勧めします。

まとめ

今回は更新の一時退避を学びました。一時退避にはstashコマンド。緊急時に多用するコマンドなので、ぜひ覚えておいてください!また退避から、復旧までに使うコマンドは以下の通りです。

  • git stash save メッセージ
  • git stash list
  • git stash apply 復旧したいstash名
  • git stash drop 削除したいstash名

保存し、確認し、復旧する。(と、あとは片付け)ぜひ覚えておいてください!

この記事を書いた人

学生時代を含めると、かれこれ10年以上プログラマーとして過ごしています。
様々な言語や環境、プロジェクトに関わってきましたので、より実践的な記事をみなさんにお届きるよう情報発信していきます!

目次