開発時にで役立つ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ドキュメントもぜひご参照ください。
記事Article
もっと見る- article
React Suspense入門:非同期UIを直感的に書ける新しいアプローチとは?
- article
useCallbackとは?再レンダリングを防ぐための基本と使い方をわかりやすく解説
- article
ReactのuseMemoとは?再レンダリングを防ぐための基本と使い方をわかりやすく解説
- article
React.memoとは?再レンダリングを防ぐための基本と使い方をわかりやすく解説
- article
Reactの再レンダリングを制御する!memo・useMemo・useCallbackの使い分けを紹介
- article
Reactの状態管理2025:「useState」「Redux Toolkit」「Jotai」「Zustand」を比較してみた