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 を復元する場面で使用します。