コードを書いている最中に、急に別のブランチで作業しなければいけなくなった経験はありませんか?
「まだコミットできる段階じゃないのに、どうしよう…」そんな時に便利なのがGit Stashという機能です。
この記事では、Git Stashの基本的な使い方から実践的なテクニックまで、初心者の方にも分かりやすく解説していきます。作業の一時保存をマスターして、開発をもっとスムーズに進めましょう。
Git Stashとは?作業を一時的に退避させる便利機能

Git Stashは、現在の作業内容を一時的に保存(退避)しておける機能のことです。
「Stash」という英単語には「しまっておく」「隠す」という意味があります。まさに、今やっている作業を一旦どこかにしまっておいて、後で取り出せるイメージですね。
どんな時に使うの?
具体的には、以下のような場面で役立ちます。
急な作業の切り替えが必要な時
- 別のブランチで緊急のバグ修正をする必要が出た
- レビュー依頼が来て、他の人のコードを確認したい
- 上司から「ちょっとこっちの機能を先に見て」と言われた
作業途中だけどコミットしたくない時
- まだ動作確認が終わっていない
- 中途半端な状態でコミット履歴を残したくない
- とりあえず試している段階のコード
作業ディレクトリとインデックスの状態を保存
Git Stashは、以下の2つの状態を保存してくれます。
- 作業ディレクトリの変更(編集したけどまだ
git addしていないファイル) - インデックスの変更(
git addしたけどgit commitしていないファイル)
つまり、コミット前の作業内容をまるごと保存できるんです。
基本的な使い方|作業を一時保存する
それでは、実際にGit Stashを使ってみましょう。
現在の変更を保存する(git stash)
最もシンプルな使い方は、以下のコマンドです。
git stash
このコマンドを実行すると、現在の変更がすべて保存されます。作業ディレクトリは、最後にコミットした状態まで戻ります。
実行例:
# 現在の状態を確認
$ git status
On branch feature/login
Changes not staged for commit:
modified: login.js
modified: style.css
# 変更を一時保存
$ git stash
Saved working directory and index state WIP on feature/login: a1b2c3d Add login form
# 作業ディレクトリがクリーンになった
$ git status
On branch feature/login
nothing to commit, working tree clean
メッセージを付けて保存する(git stash push)
複数のstashを作る場合、何を保存したか分かるようにメッセージを付けておくと便利です。
git stash push -m "ログイン機能の作業途中"
または
git stash save "ログイン機能の作業途中"
ポイント:git stash saveは古い書き方で、現在はgit stash pushの使用が推奨されています。ただし、どちらも動作します。
未追跡ファイルも一緒に保存する
通常、Git Stashは追跡されているファイル(Git管理下にあるファイル)のみを保存します。
新規作成したファイルも一緒に保存したい場合は、-uオプションを使います。
git stash push -u -m "新規ファイルも含めて保存"
-uは--include-untrackedの短縮形で、「未追跡ファイルも含める」という意味です。
保存した作業を確認する(git stash list)
保存したstashの一覧を見るには、以下のコマンドを使います。
git stash list
実行例:
$ git stash list
stash@{0}: WIP on feature/login: a1b2c3d ログイン機能の作業途中
stash@{1}: WIP on main: b2c3d4e ホームページのスタイル調整中
stash@{2}: WIP on feature/signup: c3d4e5f サインアップフォーム作成中
数字が小さいほど新しいstashです。stash@{0}が最新、stash@{1}がその前、という順番になります。
保存内容の詳細を確認する
特定のstashの中身を詳しく見たい場合は、git stash showコマンドを使います。
# 最新のstashの内容を確認
git stash show
# 特定のstashを確認
git stash show stash@{1}
# 詳細な差分を表示
git stash show -p stash@{0}
-pオプションを付けると、実際にどの行が変更されたかまで表示されます。
保存した作業を戻す方法
保存した作業を元に戻す方法は2つあります。
git stash apply|stashを残したまま適用
git stash applyは、保存した変更を作業ディレクトリに戻しますが、stashのリストには残ります。
# 最新のstashを適用
git stash apply
# 特定のstashを適用
git stash apply stash@{1}
使いどころ:
- 同じ変更を複数のブランチに適用したい時
- 念のため、stashを残しておきたい時
git stash pop|適用と同時にstashを削除
git stash popは、変更を戻すと同時に、そのstashをリストから削除します。
# 最新のstashを適用して削除
git stash pop
# 特定のstashを適用して削除
git stash pop stash@{1}
使いどころ:
- 一度使ったstashは不要な場合(ほとんどのケースはこちら)
実行例:
$ git stash pop
On branch feature/login
Changes not staged for commit:
modified: login.js
modified: style.css
Dropped refs/stash@{0} (1a2b3c4d5e6f7g8h9i0j)
「Dropped」というメッセージが出て、stashが削除されたことが分かります。
stashを削除する
不要になったstashを削除する方法も覚えておきましょう。
特定のstashを削除
git stash drop stash@{1}
すべてのstashを削除
git stash clear
注意:git stash clearを実行すると、すべてのstashが完全に削除されます。復元できないので、慎重に使ってください。
実践的な使い方|よくあるシーン別の活用法
ここからは、実際の開発でよくある場面での使い方を紹介します。
シーン1:緊急のバグ修正が入った
# 1. 現在の作業を一時保存
$ git stash push -m "新機能開発中"
# 2. mainブランチに切り替え
$ git checkout main
# 3. バグ修正用のブランチを作成
$ git checkout -b hotfix/login-bug
# 4. バグを修正してコミット
$ git add .
$ git commit -m "Fix: ログインボタンが押せない問題を修正"
# 5. 元のブランチに戻る
$ git checkout feature/new-feature
# 6. 保存していた作業を復元
$ git stash pop
シーン2:コミット前に別のブランチの確認が必要
# 作業を一時保存
$ git stash
# 確認したいブランチに移動
$ git checkout develop
# 確認後、元のブランチに戻る
$ git checkout feature/my-feature
# 作業を再開
$ git stash pop
シーン3:間違ったブランチで作業してしまった
# 1. 今の変更を保存
$ git stash
# 2. 正しいブランチに移動(または作成)
$ git checkout -b feature/correct-branch
# 3. さっき保存した変更を適用
$ git stash pop
# 4. コミットする
$ git add .
$ git commit -m "正しいブランチで作業"
よくある疑問とトラブルシューティング

Q1. stashとコミットの違いは?
コミットは、変更を正式にリポジトリの履歴として記録します。一方、stashは一時的な保存場所で、履歴には残りません。
コミットは「この変更を確定させる」という意思表示ですが、stashは「ちょっと置いておく」というイメージです。
Q2. stash中の変更がコンフリクトしたら?
git stash popやgit stash applyの実行時、現在のブランチとstashの内容が競合する場合があります。
$ git stash pop
Auto-merging login.js
CONFLICT (content): Merge conflict in login.js
この場合、通常のマージコンフリクトと同じように解決します。
- 競合しているファイルを開く
<<<<<<<、=======、>>>>>>>で示された部分を編集- 正しい内容に修正
git addでステージング
ポイント:git stash popでコンフリクトが起きた場合、stashは自動的には削除されません。解決後、手動でgit stash dropする必要があります。
Q3. stashした内容を別のブランチに適用できる?
はい、できます。stashはブランチに依存しないので、どのブランチでも適用可能です。
# feature-aブランチで作業を保存
$ git stash
# feature-bブランチに移動
$ git checkout feature-b
# 保存した変更を適用
$ git stash pop
Q4. stashは何個まで保存できる?
実質的に無制限ですが、管理が煩雑になるため、定期的に不要なstashは削除することをおすすめします。
Q5. gitignoreされているファイルもstashできる?
通常、.gitignoreに記載されているファイルはstashされません。
どうしても必要な場合は、-a(--all)オプションを使います。
git stash push -a -m "ignoreファイルも含めて保存"
ただし、一般的にはignoreファイルをstashする必要はありません。
まとめ:Git Stashで作業効率を上げよう
Git Stashは、作業の一時保存ができる便利な機能です。
急なタスクの切り替えや、ブランチ間の移動がスムーズになるので、覚えておくと開発効率が大きく向上します。
基本コマンドのおさらい:
git stash:現在の変更を一時保存git stash list:保存したstashの一覧を表示git stash pop:最新のstashを適用して削除git stash apply:stashを適用(リストに残す)git stash drop:特定のstashを削除git stash clear:すべてのstashを削除
最初は「とりあえずgit stashとgit stash popだけ覚える」という形でも十分です。実際に使いながら、少しずつ他のコマンドも試してみてください。
Gitの作業がもっと快適になるはずです。

コメント