GitGit [ギット]ソースコードの変更履歴を管理する分散型バージョン管理システムを使って開発を進めていると、「今の作業はまだコミットしたくないけれど、急遽別のブランチに切り替えて作業する必要が出た」という場面に遭遇することがよくあります。そんな時に大活躍するのが git stash コマンドです。
git stash を使えば、コミット前の作業中の変更を一時的に退避させ、作業ディレクトリをクリーンな状態に戻すことができます。
本記事では、git stash の基本から、実務で役立つ便利なオプションまで、具体的なコマンド例とともに解説します。
1. git stash とは?(作業の一時退避)
git stash は、現在の作業ディレクトリとステージングエリアにある変更内容を一時的に別の場所(スタッシュ)に保存するコマンドです。
スタッシュに退避させることで、作業途中の状態を失うことなく、別のブランチにチェックアウトしたり、git pull で最新のコードを取得したりすることが可能になります。急な割り込みタスクが発生した際などに非常に重宝します。
2. git stash の基本的な使い方(退避・確認・復元)
まずは、日常的によく使う基本的なコマンドの流れを見ていきましょう。
変更を一時退避する(git stash / push)
作業中のファイルを一時的に退避するには、以下のコマンドを実行します。
git stashまたは、最近のGitバージョンで推奨されている push サブコマンドを使います。
git stash pushこのコマンドを実行すると、変更が退避され、追跡対象ファイルの作業ツリーとステージングエリアは直前のコミット(HEAD)の状態に戻ります。
退避したスタッシュの一覧を確認する(list)
これまでに退避した作業(スタッシュ)の一覧を確認するには、以下のコマンドを使います。
git stash liststash@{0}: WIP on main: 1a2b3c4 Add feature Astash@{1}: WIP on develop: 5d6e7f8 Update config最新の退避作業は stash@{0} という名前で保存され、過去のものは stash@{1}, stash@{2} と数字が大きくなっていきます。
退避した作業を復元する(pop / apply)
退避した作業を現在のブランチに戻すには、主に2つのコマンドがあります。用途に応じて使い分けましょう。
① 復元して、適用に成功したらスタッシュから削除する(git stash pop)
git stash poppop は、最新のスタッシュ(stash@{0})を作業ディレクトリに適用し、適用に成功するとそのスタッシュを一覧から削除します。
【注意】コンフリクト(競合)が発生した場合
pop実行時に現在の作業ツリーの変更とコンフリクトが発生すると、適用は中断され、スタッシュは自動削除されずに一覧に残ります。その場合は、手動でコンフリクトを解消した後にgit stash dropで対象のスタッシュを明示的に削除する必要があります。
② 復元するがスタッシュは残す(git stash apply)
git stash applyapply は、作業ディレクトリに変更を適用しますが、スタッシュ自体は一覧に保持したままにします。同じ変更を複数のブランチに適用したい場合などに便利です。
特定のスタッシュを復元したい場合は、
git stash pop stash@{1}やgit stash apply stash@{1}のように指定することも可能です。
3. 応用編:git stashの実務で役立つ便利な使い方
基本的な操作に加えて、知っておくとさらに便利な git stash の使い方をご紹介します。
メッセージを付けて退避する(-mオプション)
デフォルトのスタッシュ名では、後から見た時に何の作業だったか分かりにくくなることがあります。その場合、メッセージを付けて退避することができます。
git stash push -m "〇〇機能の作業途中"これにより、git stash list を実行した際に、指定したメッセージが表示されるため管理が楽になります。
新規作成ファイル(未追跡ファイル)も退避する(-u / -aオプション)
デフォルトの git stash では、Gitの追跡対象となっているファイルの変更が退避されます。未追跡の新規ファイル(Untracked files)は対象になりません。
新しく作成した未追跡のファイル(Untracked files)も含めて退避したい場合は、-u(または --include-untracked)オプションを使います。
git stash -uまたは
git stash push -u補足:未追跡ファイルに加えて、
.gitignoreで無視されているファイルも含めてすべて退避したい場合は、-a(または--all)オプションを使用します(例:git stash -aまたはgit stash push -a)。
特定のファイルだけを指定して退避する
作業ディレクトリ全体ではなく、特定のファイルだけを退避したい場合は、ファイルパスを指定して実行します。
git stash push -m "〇〇ファイルの変更を退避" 該当ファイルのパス特定のファイルだけをスタッシュから復元する
スタッシュに保存された内容から、一部のファイルだけを選んで復元したい場合は、git checkout コマンドを使用します。
git checkout stash@{0} -- 該当ファイルのパス4. 退避した作業(スタッシュ)の削除
不要になったスタッシュは削除して整理しましょう。
特定のスタッシュを削除する(git stash drop)
git stash drop stash@{1}すべてのスタッシュを削除する(git stash clear)
git stash clearこの操作を行うと、保存されていたすべてのスタッシュが一括で削除されるため、実行する際は十分にご注意ください。
5. まとめ:git stashで作業の退避と復元を効率化
git stash を使いこなすことで、開発中の「ちょっと待って」に柔軟に対応できるようになります。
git stash: 変更を一時退避git stash list: 退避一覧の確認git stash pop: 退避を復元して削除git stash push -m "...": メッセージ付きで退避git stash -u: 新規ファイルも含めて退避
これらの基本コマンドを覚えておけば、急なブランチの切り替えや最新コードの取得も怖くありません。ぜひ日々の開発に取り入れてみてください。
関連記事
Gitの基本操作やその他の便利なコマンドについて学びたい方は、以下のまとめ記事もぜひご覧ください。

Git入門|基本操作・コマンド解説・トラブル対処法まとめ
Gitの学習に必要な情報を網羅的にまとめた完全ガイドです。Gitの基本概念や初期設定から、ステージングなどの基本操作、ブランチ管理、コンフリクト解消、よくあるエラーのトラブル対処法、VS Code連携まで目的別に整理。日々の開発で迷った時のリファレンスとしてご活用ください。
以上で本記事の解説を終わります。
よいITライフを!
人気記事
- 1
- 2
- 3
- 4
- 5
とにかく挫折しない丁寧な解説。チーム開発での基本的な流れを確実にマスターできます。