
はじめに
開発作業を進めていると、予定外の対応が急に発生することがあります。たとえば、新しい機能を作っている途中で「今すぐバグを直してほしい」と依頼されることも珍しくありません。そんなときに役立つのが git stash
です。
git stash
は、今の作業を一時的に保存して作業ディレクトリをきれいな状態に戻せるGitの仕組みです。これにより、未コミットの変更を無理にコミットすることなく、別のタスクへすぐに切り替えることができます。
まだコミットしないけど取っておきたい、そんな大事なものを「こっそりしまって(stash)」後で使う様子をイメージしていただけると理解しやすいでしょう。
この記事では、git stash
の基本操作から実践的な活用方法、さらに知っておくべき注意点までを初心者向けにわかりやすく解説していきます。
この記事で学べること
- git stash の利点
- 基本的な操作(push / list / apply / drop / clear)
- 実践的な活用方法
- 応用操作(pop / branch)
- ベストプラクティスと注意点
Gitについてさらに学びたい方へ
GitとGitHubの基本を深く知りたい方は、以下の記事もおすすめです。
▼Gitを基礎から学びたい方はこちら
【初心者向け】GitHubとは?必須知識と使い方について解説!
https://envader.plus/article/68
▼Gitコマンド早見表はこちら
必見!現場で役立つGitコマンド29選をまとめて紹介!
https://envader.plus/article/402
git stashとは
git stash
は、作業中の未コミットの変更を一時的に保存し、作業ディレクトリをクリーンな状態に戻せるGitの機能です。
保存した変更は後から取り出せるため、緊急対応やブランチの切り替えなどに柔軟に対応できます。これにより、作業の中断やタスクの切り替えがスムーズになり、生産性の向上につながります。
未ステージングの変更もステージング済みの変更も含めて退避できる点が特徴で、開発現場でよく直面する「今すぐコミットできない変更」を安全に扱える仕組みと言えるでしょう。
なぜgit stashが必要なのか?
git stash
が活躍する場面はいくつかあります。代表的なシナリオを見てみましょう。
-
複数タスクの同時進行時
新機能を開発中に「緊急でバグ修正が必要」と依頼されることは、よくあるシーンです。まだコミットするには早い変更をそのままにしておくと混乱の元になりますが、
git stash
なら安全に退避して別の作業へ取りかかれます。 -
ブランチの切り替えを行いたいとき
作業中の変更を stash に保存すれば、未完了のコードを無理にコミットせずに他のブランチへ移動できます。これにより、ブランチ間の切り替えがスムーズになります。
-
試した変更を保留にしたいとき
新しいアイデアをすぐにコミットするか迷う場面もあります。そんなときに変更を stash へ保存しておけば、後で必要に応じて再評価することが可能です。
これらのシナリオは、日常の開発作業でよく遭遇する状況であり、git stash
はこれらの挑戦に対処するための効率的な解決策を提供します。結局のところ、git stash
を使用することで、開発者は作業の中断やコンテキストの切り替えを柔軟に行いつつ、効率的にタスクを管理できるようになります。
git stashの使い方:基本から応用までの活用方法
git stash
の使い方はシンプルですが、覚えておくと開発の柔軟性が大きく向上します。ここでは、基本的なコマンドの操作方法から、応用的な活用シーンまで順を追って解説します。
1. 変更の退避(git stash push)
作業中の変更を一時的に保存する基本コマンドです。
git stash push -m "メッセージ"
-m
オプションを使いメッセージを付けておけば、後から「どの作業を退避したものか」を判断しやすくなります。
実践シナリオ
新機能を開発している最中に緊急バグ修正が必要になったとき、以下のようにコマンドを実行して作業を退避すれば、バグ修正に専念できます。
git stash push -m "新機能の開発途中"
2. 退避した変更の確認(git stash list)
stash で保存した作業の一覧を確認するコマンドです。
git stash list
実行すると <stash名>: メッセージ
のように一覧が表示され、どの作業をいつ退避したのか把握できます。
3. 退避した変更の復元(git stash apply)
特定の stash を取り出して作業に戻すときに使います。
git stash apply <stash名>
必要な <stash名>
を指定することで、途中で中断した作業を再開できます。
4. 不要なstashの削除(git stash drop / git stash clear)
不要になった stash を削除することで、リストを整理できます。
-
特定の stash を削除:
git stash drop <stash名>
-
すべての stash を削除:
git stash clear
実践シナリオ
退避していた変更を git stash apply <stash名>
で復元し、作業を再開できたとします。
この時点で保存しておいた stash は不要になる場合、drop
または clear
を使って削除し、作業環境をきれいに保ちます。
5.退避した変更を復元しつつ削除(git stash pop)
git stash pop
は git stash apply
と似ていますが、適用後にそのstashを自動で削除する 点が異なります。
git stash pop <stash名>
「変更を復元し、もう stash は残しておく必要はない」という場合に便利です。
実践シナリオ
緊急対応を終えて、stash に残していた作業を再開する際に git stash pop <stash名>
を使えば、変更を復元すると同時に不要な stash を削除でき、作業ディレクトリをすっきり保てます。
6.退避した変更を新しいブランチに適用(git stash branch)
git stash branch
は、退避した変更を 新しいブランチ上で復元 するコマンドです。
git stash branch <branch名> <stash名>
実行すると指定したブランチを作成してチェックアウトし、その上に stash を適用します。
実践シナリオ
開発途中で「この変更は別ブランチで進めたほうが良さそうだ」と判断したときに有効です。
たとえば、feature
ブランチで作業しているときに、その変更を基に新しいexperiment
ブランチを試したくなったとします。
まず git stash push -m "機能開発途中"
で現在の変更を退避させます。次に git stash branch experiment
を実行すると、退避した変更を含む新しいexperiment
ブランチが作成され、そのブランチに自動的にチェックアウトされます。
このプロセスにより、新しい機能を試すためのクリーンな環境が用意され、同時に元のfeature
ブランチはそのまま保持されます。
# 現在の変更を退避する
git stash push -m "機能開発途中"
# 退避した変更を含む新しいブランチを作成し、そのブランチにチェックアウトする
git stash branch experiment
# 新しいブランチで実験を行う
# ...
# 実験が完了したら、元のブランチに戻り、変更をマージする
git checkout feature
git merge experiment
# 不要になったスタッシュを削除する(<stash名>を指定)
git stash drop <stash名>
git stashのベストプラクティスと注意点
git stash
を使うことで、開発プロセスをより柔軟かつ効率的に進めることがわかりました。しかし、その機能を最大限に活用するためには、いくつかのベストプラクティスを理解し、一般的な落とし穴を避ける必要があります。
ベストプラクティス
-
明確なメッセージを使用
git stash push
を実行する際には、-m
オプションを使って変更に関する明確なメッセージを付けることをお勧めします。後でstash一覧を見たときに、各stashが何を含んでいるのかを簡単に識別できます。git stash push -m "新しいログイン機能の開発途中"
-
頻繁に確認し整理
git stash list
を定期的に実行して、stashされた変更を確認しましょう。不要になったstashは、git stash dropやgit stash clearを使って定期的に削除することで、管理しやすくなります。 -
適切なタイミングで適用
変更を戻す際には、
git stash apply
よりもgit stash pop
を推奨します。popはstashを適用した後にそれを削除するため、不要になった変更がstashリストに残ることを防げます。ただし、変更を失いたくない場合はapplyを使用し、動作を確認してから手動で削除してください。 -
作業中のブランチに注意
stashを適用する前に、正しいブランチにいることを確認してください。stashはブランチ間で移動できますが、間違ったブランチに変更を適用すると、混乱が生じる可能性があります。
注意点
-
stashは永久的な保存方法ではない
重要な変更はコミットとして保存することを心がけてください。stashはあくまで一時的な退避手段であり、gitのデータベースではなく、一時的なエリアに保存されます。
-
大きな変更をstashに保持しない
大規模な変更や長期間にわたる作業をstashに保持すると、後で問題が発生する可能性があります。特に、他の人が関与するプロジェクトで作業している場合、コードベースに大きな変更が加わっていると、stashした変更を再適用する際に衝突が発生しやすくなります。
-
stashを過信しない
特に重要な変更を扱う際には、ブランチを新しく作成してそこにコミットするなど、より安全な方法を検討するべきです。stashは便利ですが、誤って変更を失うリスクも伴います。
これらのベストプラクティスと注意点を念頭に置くことで、git stash
をより効果的に、かつ安全に使用することができるようになります。
git stashは途中でセーブして別作業ができる
git stash
は、開発プロセスを大きく改善する便利な機能です。この機能を使えば、以下のようなメリットが得られます。
-
柔軟性の向上
緊急の修正や他のブランチへの切り替えが必要になっても、進行中の作業を安全に退避させることができます。
-
作業の中断を最小限に抑える
未完了の作業を保持したまま、他のタスクに素早く対応できるようになります。
-
クリーンな作業環境の維持
新たな作業を始める前に、作業ディレクトリをクリーンな状態に保てます。
-
効率的なコンテキストスイッチ
コンテキストスイッチとは、別のタスクなどに注意を向けることです。複数のタスクやブランチ間を簡単に行き来でき、スムーズに作業を継続できます。
git stash
は、開発者の生産性と柔軟性を大幅に高める、必須の機能と言えるでしょう。覚えられなくても大丈夫、何回でもこの記事を参照してぜひ使いこなしてください。
関連記事
【番外編】USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話

プログラミング塾に半年通えば、一人前になれると思っているあなた。それ、勘違いですよ。「なぜ間違いなの?」「正しい勉強法とは何なの?」ITを学び始める全ての人に知って欲しい。そう思って書きました。是非読んでみてください。
「フリーランスエンジニア」
近年やっと世間に浸透した言葉だ。ひと昔まえ、終身雇用は当たり前で、大企業に就職することは一種のステータスだった。しかし、そんな時代も終わり「優秀な人材は転職する」ことが当たり前の時代となる。フリーランスエンジニアに高価値が付く現在、ネットを見ると「未経験でも年収400万以上」などと書いてある。これに釣られて、多くの人がフリーランスになろうとITの世界に入ってきている。私もその中の1人だ。数年前、USBも知らない状態からITの世界に没入し、そこから約2年間、毎日勉学を行なった。他人の何十倍も努力した。そして、企業研修やIT塾で数多くの受講生の指導経験も得た。そこで私は、伸びるエンジニアとそうでないエンジニアをたくさん見てきた。そして、稼げるエンジニア、稼げないエンジニアを見てきた。
「成功する人とそうでない人の違いは何か?」
私が出した答えは、「量産型エンジニアか否か」である。今のエンジニア市場には、量産型エンジニアが溢れている!!ここでの量産型エンジニアの定義は以下の通りである。
比較的簡単に学習可能なWebフレームワーク(WordPress, Rails)やPython等の知識はあるが、ITの基本概念を理解していないため、単調な作業しかこなすことができないエンジニアのこと。
多くの人がフリーランスエンジニアを目指す時代に中途半端な知識や技術力でこの世界に飛び込むと返って過酷な労働条件で働くことになる。そこで、エンジニアを目指すあなたがどう学習していくべきかを私の経験を交えて書こうと思った。続きはこちらから、、、、
エンベーダー編集部
エンベーダーは、ITスクールRareTECHのインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。

関連記事

2024.06.02
リポジトリのメンテナンス係「git gc 」とは?活用方法を徹底解説!
この記事では、リポジトリのメンテナンスに不可欠な「git gc」を解説します。
- git

2024.06.02
Gitコマンド「git reflog」とは?「HEAD」も併せて解説!
git reflogはGitが保持する「reflog(リファレンスログ)」を表示するコマンドです。
- git

2025.06.26
【Git】git cherry-pickとは?便利な使い方と注意点を解説
別ブランチのコミットを一つだけ取り込み、バグ修正などに活用。git cherry-pickの基本からオプション、コンフリクト発生時の注意点までを解説します。
- git

2024.06.29
Gitのコミット履歴を検索するgit rev-listコマンドを解説!
この記事を読むことで、`git rev-list`の使い方の基本を学べます!さまざまなGitコマンドを習得して、Gitマスターを目指しましょう!
- git