【早見表】開発時に役立つgit stashコマンドのまとめ
変更を一時的に退避させたいとき、git stashは非常に便利なコマンドです。
例えば「今作業中だけど、急遽別のブランチでバグ修正しなきゃ…」というとき、作業内容をそのまま避けておけるのがgit stashの魅力です。
この記事では、初心者の方にもわかりやすく、基本の使い方から実践的な活用方法まで、具体例とともに丁寧に解説いたします。
あわせて、Git公式ドキュメントも適宜参照し、信頼性ある内容を心がけております。
一時退避の基本コマンド
作業中の変更を一時退避する
bashgit stash
このコマンドを実行すると、**ワークツリーの変更(追跡済みファイル)**が退避され、git statusはクリーンな状態になります。
bash$ git stash
Saved working directory and index state WIP on main: abc1234 コメントメッセージ
この状態で、他のブランチへ移動して作業することが可能です。
stashの一覧を確認する
bashgit stash list
bashstash@{0}: WIP on main: abc1234 コメント
stash@{1}: WIP on feature/foo: def5678 追加修正
それぞれのstashはstash@{N}という形で識別できます。
一時退避内容を元に戻す(apply・pop)
git stash apply
bashgit stash apply stash@{0}
このコマンドはstashされた変更をワークツリーに戻します。ただし、stash自体は削除されません。
git stash pop
bashgit stash pop
applyと同じく変更を適用し、さらにstashを削除します。作業が戻ったことを確認しましょう。
退避時にメッセージをつける
bashgit stash save "フォームレイアウト作業中"
Git 2.15以降ではこの形式は非推奨です。代わりにpushを使います。
bashgit stash push -m "フォームレイアウト作業中"
特定のファイルだけをstashする
bashgit stash push -m "header部分のみ退避" header.tsx
必要なファイルだけを選んで退避することで、粒度の細かい管理ができます。
index(ステージング済み)も含めてstash
bashgit stash -k
もしくは
bashgit stash --keep-index
このオプションは、インデックスにある変更を保持し、ワーキングディレクトリだけをstashします。
ステージング済み変更も含めてstash(indexも含む)
bashgit stash -u
もしくは
bashgit stash push --include-untracked
-uは未追跡ファイル(untracked)も含めてstashします。
bashgit stash push -a
はすべてのファイル(ignored含む)を含めます。こちらは--allのショートカットです。
stashの内容を確認する
差分で確認
bashgit stash show stash@{0}
bashgit stash show -p stash@{0}
-pをつけることで、詳細なdiff表示が確認できます。
stashを削除する
特定のstashを削除
bashgit stash drop stash@{0}
全てのstashを削除
bashgit stash clear
うっかり消してしまわないように、内容確認してから実行するのが良いでしょう。
実戦的な活用パターン
パターン1:緊急で別ブランチに移動する必要がある
bashgit stash push -m "途中作業を一時退避"
git checkout hotfix/urgent-bug
パターン2:特定ファイルだけ退避して、残りを継続作業
bashgit stash push -m "CSSだけ退避" styles/global.css
stashを適用時にコンフリクトが発生したら?
通常のマージコンフリクト同様、手動で解決してコミットする必要があります。
bashgit status
# 両方の変更がある箇所が表示される
その後、以下のように対応します。
bash# コンフリクト解消後
git add .
git commit -m "stash適用時の競合を解消"
stashはブランチをまたいで使えるのか?
はい、stashはブランチに依存せず、どのブランチでも取り出すことができます。
bashgit stash
git checkout 別のブランチ
git stash pop
stashに名前をつけて管理する方法は?
残念ながら、stashは名前での管理は直接サポートされていません。
そのため、わかりやすいメッセージを使うことが重要です。
bashgit stash push -m "ログインフォーム改善"
stashをコミットとしてブランチ化する
bashgit stash branch fix-form stash@{0}
このコマンドで、stashの内容から新しいブランチを作成できます。
よくあるエラーと対処法
| 状況 | エラー例 | 解決策 |
|---|---|---|
| stashが適用できない | conflictが発生する | コンフリクトを手動で解消 |
| stashが消えてしまった | pop後に確認できない | applyを使うか、branchでブランチ化してから利用 |
| 退避したはずのファイルが戻らない | -uや-aを付け忘れ | --include-untrackedで再度退避 |
よく使うstashコマンドまとめ
| コマンド | 説明 |
|---|---|
git stash | 作業中の変更を一時退避 |
git stash push -m "メモ" | メッセージ付きで退避 |
git stash list | stashの一覧表示 |
git stash apply | 退避内容を戻す(削除しない) |
git stash pop | 退避内容を戻して削除 |
git stash drop stash@{N} | 指定のstashを削除 |
git stash clear | 全てのstashを削除 |
git stash branch new-branch stash@{N} | 新ブランチ作成 |
まとめ
git stashは、中断と再開が多い開発現場において強力な味方です。
用途ごとに使い分ければ、作業の効率が飛躍的に向上します。
特に以下の使い方はおすすめです。
git stash push -m "作業内容"で意味のあるメモを残すgit stash branchで分岐作業をスムーズにgit stash show -pで内容確認してから適用
詳細はGit公式stashドキュメントもぜひご参照ください。
著書
article2026年11月3日Cline に git push させない手順: .clinerules では止まらず pre-push フックで止まった
articleGit パフォーマンス運用:gc/pack 設計/prefetch で巨大リポを加速させる
articleGit worktree 速習:複数ブランチを同時並行で開発する最短レシピ
articleGit の依存取り込み比較:subtree vs submodule — 運用コストと安全性の実態
articleGit の index.lock 残留問題を解決:並行実行・クラッシュ後の正しい対処法
articleGit ワークフロー地図 2025:トランクベース/フォーク/リリースブランチの選び方
articleClaude Code と Codex を並列で動かしたときの動き: 同じファイルでも書き換えは消えない
articleClaude Code の Stop フックで、終わる前にテストを走らせる手順: 失敗が残ったまま終わらない
articleClaude Code と Codex のスキルの置き場所の動き: .claude/skills と .agents/skills は互いに読まない
articleClaude Code の /security-review で変更を点検する手順: origin/HEAD がないと止まる
articleClaude Code と Codex のスキルを入れる前に中身を確かめる手順: security-audit で見る5か所
articleCloudflare の security-audit スキルを Claude Code と Codex で比較: 3つとも見つけ、進め方に差
