作業の途中で「急ぎの対応が入ったからブランチを切り替えたい」。でもコミットするにはキリが悪い——この板挟みを一発で解決するのが git stash です。
先に大事な結論をひとつ。昔の記事でよく見る git stash save はGit 2.13(2017年)から非推奨で、現在の標準は git stash push です。
この記事はpushを軸に、退避→確認→復元の基本から、ステージ済みだけ退避する --staged、ファイル単位の部分退避、stashからブランチを作る小技まで、2026年時点の使い方をまとめます。
私自身、エンジニア1年目はGUIツール(SourceTree)派でしたが、先輩たちが全員コマンド派だった理由は、本番サーバやCI上ではコマンドしか使えないから。stashはその第一歩として最高に費用対効果の高いコマンドです。
末尾にコピペで使えるチートシートも置いたので、ブックマークして退避のたびに開いてください。
この記事でわかること
・git stash push/list/apply/pop/dropの基本操作
・saveが非推奨になった理由とpushとの違い
・--staged・部分退避・stash branchの実践テクニック
・コピペで使えるコマンドチートシート
git stashは何が便利なのか
コミットしていない変更がある状態でブランチを切り替えようとすると、こんなエラーが出ます。
error: Your local changes to the following files would be overwritten by checkout:
..(中略)..
Please commit your changes or stash them before you switch branches.意訳すると「切り替えると作業中の内容が上書きされるよ。コミットするかstashしてね」。キリが悪くてコミットしたくないとき、stashを使えば次の流れで作業を中断・再開できます。
- 作業内容を一旦退避させる(push)
- 作業ツリーが変更のないきれいな状態になる
- ブランチを切り替えたりpullしたりできる
- 退避した作業内容を元に戻す(pop / apply)
「とりあえずWIPコミット」を乱発するよりコミットログが汚れず、レビューする側としてもありがたい運用です。
基本の使い方:退避は「git stash push」
作業を退避する(push -u -m)
退避したい変更がある状態で、次のコマンドを実行するだけです。
# とにかく退避したいとき(pushは省略可)
git stash push -u
# メッセージ付きで退避(後から見分けられるので強く推奨)
git stash push -u -m "ログイン画面の作業途中"オプションの意味は次のとおりです。
- -u(--include-untracked):新規作成した未追跡ファイルも一緒に退避する。付け忘れると新規ファイルだけ作業ツリーに残るので、基本は常に付けるのがおすすめ
- -m "メッセージ":退避に名前を付ける。1週間後の自分は「WIP on main」だけでは絶対に思い出せません
なお git stash単体は git stash push の省略形です。古い記事にある git stash save は非推奨で、pathspec(後述のファイル指定)が使えないなど機能面でも劣ります。今から覚えるならpush一択です。
退避した一覧を確認する(list)
$ git stash list
stash@{0}: On main: ログイン画面の作業途中
stash@{1}: WIP on main: 1a2b3c4 direct commit上が最新です。stash@{数字} がそれぞれの退避を指すIDで、以降のコマンドで指定に使います。
退避した作業を戻す(apply / pop)
# 最新の退避を戻す(一覧には残る)
git stash apply
# 最新の退避を戻し、一覧からも削除する
git stash pop
# 番号を指定して戻す
git stash pop stash@{1}applyは「戻しても一覧に残す」、popは「戻して一覧から消す」。複数ブランチに同じ変更を適用したいときはapply、通常の中断→再開ならpopと使い分けます。
退避を削除する(drop / clear)
# 最新の退避を削除
git stash drop
# 番号を指定して削除
git stash drop stash@{1}
# 全部削除(要注意:元に戻すのは困難)
git stash clear一歩踏み込んだ使い方4選
①退避の中身を確認する(show / show -p)
# どのファイルが変わったかの一覧
$ git stash show stash@{0}
src/login.tsx | 11 +-
src/api/auth.ts | 9 ++
2 files changed, 18 insertions(+), 2 deletions(-)
# git diff形式で変更内容まで確認
git stash show -p stash@{0}popする前に show -p で中身を確認する癖をつけると、「何が入っているかわからないstashを恐る恐る戻す」事態を避けられます。
②ステージ済みの変更だけを退避する(--staged)
Git 2.35以降では、git add 済みの変更だけを選んで退避できます。「この修正はコミットに含めたくないな」というものをaddして退避する、逆転の発想で使えるオプションです。
# ステージ済みの変更だけを退避(未ステージの変更は手元に残る)
git stash push --staged -m "別PRに分けたい修正"③ファイル単位・ハンク単位で部分退避する
pushが優れているのはここで、退避するファイルを指定できます。さらに -p を使えば変更の塊(ハンク)ごとに対話形式で選べます。
# 指定したファイルだけ退避
git stash push -m "設定ファイルだけ退避" config/app.ts
# 対話形式で退避する変更を1つずつ選ぶ
git stash push -p④stashから新しいブランチを作る(stash branch)
「stashを戻したらコンフリクトした」ときの切り札です。stashした時点のコミットから新ブランチを切り、そこに退避内容を展開してくれるので、コンフリクトが原理的に起きません。
# stash@{0}の内容で新ブランチfeature/loginを作成
git stash branch feature/login stash@{0}git stashチートシート【保存版】
| やりたいこと | コマンド |
|---|---|
| 退避(未追跡ファイル込み・名前付き) | git stash push -u -m "メモ" |
| 退避一覧を見る | git stash list |
| 中身を確認する | git stash show -p stash@{n} |
| 戻す(一覧に残す) | git stash apply stash@{n} |
| 戻す(一覧から消す) | git stash pop stash@{n} |
| 削除する | git stash drop stash@{n} |
| 全削除する | git stash clear |
| ステージ済みだけ退避 | git stash push --staged |
| ファイル指定で退避 | git stash push ファイルパス |
| 対話形式で部分退避 | git stash push -p |
| stashからブランチ作成 | git stash branch ブランチ名 stash@{n} |
初心者がハマるポイント3つ
①popでコンフリクトしてもstashは消えない
popはコンフリクトが起きると「戻す」だけ実行して「消す」を中断します。つまり退避内容は失われていません。落ち着いてコンフリクトを解消し、不要になったstashを drop すればOKです。慌てて clear するのだけは絶対にやめましょう。
②-uを忘れて新規ファイルが退避されない
stashのデフォルトは追跡中ファイルのみが対象です。「退避したはずなのに新規ファイルが残っている」のは仕様なので、-u を付ける癖をつけましょう。
③stashを長期保管庫にしない
現場でよくあるのは、数週間前のstashが溜まって「これ何だっけ?」となるパターン。stashはあくまで数時間〜1日の一時退避です。プロのコツとして、日をまたぐ変更はstashではなくWIPブランチにコミットして残すほうが、履歴も残り消失リスクもありません。
まとめ
- 退避の基本形は git stash push -u -m "メモ"(saveは非推奨)
- 戻すのはpop(消す)とapply(残す)を使い分ける
- --staged・部分退避・stash branchを知っていると退避の精度が上がる
- 長期保管はstashではなくWIPブランチで
Gitをコマンドで扱えることは、実務でもポートフォリオでも確実に評価されるスキルです(ポートフォリオで見られる15のポイントでも触れています)。
独学でGit運用のイメージが湧かないなら、チーム開発を経験できるスクールを使うのも近道ですし、基礎ができている人は転職エージェントに「Gitフローが整った現場」を条件に相談してみると、環境選びの解像度が上がります。
開発環境つながりではnvmでNodeバージョンを管理する方法もどうぞ。
よくある質問(FAQ)
Q. git stash saveはもう使えないのですか?
現時点では動きます(後方互換のため残されています)が、Git 2.13以降は公式に非推奨で、ファイル指定などpushにしかない機能もあります。新しく書くスクリプトや手癖はpushに統一しておくのが安全です。
Q. 間違えてdropしたstashは復元できますか?
可能性はあります。dropの直後に表示されるコミットハッシュを控えていれば git stash apply ハッシュ で復元できます。見失った場合も git fsck --unreachable で探せることがありますが、確実ではないので、迷ったら消さないのが鉄則です。
Q. stashとWIPコミットはどう使い分けますか?
数時間以内に同じブランチへ戻るならstash、日をまたぐ・他の人と共有する可能性があるならWIPコミット(またはドラフトPR)がおすすめです。stashはローカルにしか存在しないため、PCが壊れると一緒に消えます。
この感覚は駆け出しエンジニアがやりがちな勘違いで紹介している「動けばOK」からの卒業ポイントのひとつです。
あわせて読みたい関連記事
nvmでNodeバージョンを切り替える手順|fnm・mise比較つき【2026】nvmの公式スクリプトによる導入からNode 24 LTSへの切り替え、.nvmrcでの自動切替までを最短手順で解説。Homebrew経由が非推奨の理由や、fnm・mise・Voltaとの比較表と使い分けの結論つきで、2026年のNodeバージョン管理はこれ1本で迷いません。frontendlab.magicgifted.com
【完全ガイド】未経験エンジニアにポートフォリオは必要?評価される15のポイントと優先順位未経験エンジニアにポートフォリオは本当に必要なのか、不要論の背景から面接官に評価される15のポイント、作成時の優先順位まで解説。神レベルを目指さず、転職につながる1本を完成させるための完全ガイドです。frontendlab.magicgifted.com
駆け出しエンジニアの勘違いTop5|「誰でも高収入」の罠と1年目の正しい戦略「エンジニアは人手不足だから誰でもなれる」「1年目から高収入」は勘違いです。本当に足りないのは即戦力で、市場価値が跳ね上がるのは実務経験1年から。駆け出しが信じがちな勘違いTop5を現場目線で正し、1年目に取るべき戦略まで解説します。frontendlab.magicgifted.com





