Git Stash: 変更を一時保存して復元する

git stash を使ってコミットしていない変更を一時保存し、後で復元する方法を解説。作業中の内容を失わずにブランチを切り替えられます。

git stash push -m "work in progress"

詳細な説明

git stash は何をするのか?

git stash は、コミットしていない変更(ステージ済み・未ステージ両方)をスタックに保存し、別の作業に取りかかれるようにします。作業ディレクトリは最後のコミットの状態に戻り、クリーンな状態になります。

基本的な使い方

# 説明的なメッセージ付きで変更を stash する
git stash push -m "work in progress on login form"

# すべての stash を一覧表示
git stash list

# 最新の stash を復元する(スタックからも削除)
git stash pop

# スタックから削除せずに復元する
git stash apply

未追跡ファイルも stash する

デフォルトでは git stash は追跡済みファイルのみを保存します。未追跡ファイルも含めるには:

git stash push -u -m "include new files"

無視されたファイルも含めるには -a(all)を使います。

複数の stash を管理する

各 stash は stash@{0}stash@{1} のようにインデックスされます。特定の stash を適用または削除できます:

# 特定の stash を適用
git stash apply stash@{2}

# 特定の stash を削除
git stash drop stash@{1}

# すべての stash をクリア
git stash clear

Stash からブランチを作成する

stash した変更が現在のブランチとコンフリクトする場合、stash から新しいブランチを作成できます:

git stash branch new-feature-branch stash@{0}

これは stash が作成された時点のコミットをチェックアウトし、stash を適用し、削除するという操作を一度に行います。

ヒント

stash には必ず -m フラグでラベルを付けましょう。メッセージがないと stash リストの管理が困難になります。stash は短期的なクリップボードとして考え、長期保存には使わないでください。作業が意味のあるものになったら commit するかブランチを切りましょう。

ユースケース

開発者が機能実装の途中で緊急のバグ報告を受けた場合に、現在の作業を stash し、ホットフィックスブランチに切り替え、修正後に stash を復元する場面で使用します。

Try It — Git Command Builder

フルツールを開く