できない.dev

git stash

別名: stash / スタッシュ / git stash pop

git stash は、まだコミットしていない作業ツリーの変更を一時退避してクリーンな状態に戻すコマンド。stash pop / apply で後から復元でき、ブランチ切り替え前の待避に使う。

公開:

定義

git stash は、まだコミットしていない作業ツリーとインデックスの変更を一時退避し、クリーンな状態に戻すコマンドです。
ブランチを切り替えたいが今の変更をコミットしたくない、というときに使います。
退避した変更は Git のスタック(stash@0, stash@1…)に積まれます。

詳細

git stash push で退避し、git stash pop で最新の退避を復元しつつスタックから取り除きます。git stash apply は取り除かずに復元します。
一覧は git stash list、破棄は git stash drop です。
追跡されていない(untracked)ファイルも退避するには -u を付けます。

よくある誤解

git stash pop は「必ず自動で drop する」わけではありません。
復元時に衝突が起きると、安全のため stash はスタックに残ったままになります。
衝突を解消して git add した後、git stash drop で手動除去が必要です。

関連

pop 時の衝突については Git stash pop でコンフリクトが起きて取り出せない を参照してください。