Gitのスタッシュ機能まとめ
はじめに
Gitの**スタッシュ(stash)**は、作業途中の変更を一時的に退避して、作業ディレクトリをきれいな状態に戻す機能です。
例えば「今やってる作業を中断して、別のブランチのバグ修正にすぐ移りたい」ときに、コミットせずに変更を保存できます。
📝 スタッシュの基本
📌 基本のコマンド
git stash
-
変更を退避し、作業ディレクトリを最新のコミット状態に戻します。
-
追跡済みファイルの変更とステージングエリアの変更が対象。
-
新規ファイル(未追跡)はデフォルトでは退避されません。
未追跡ファイルも退避したい場合は -u
オプション(または --include-untracked
)を使います。
例:git stash -u
📜 スタッシュの一覧表示
git stash list
-
保存されたスタッシュは
stash@{0}
,stash@{1}
… のように番号付きで表示されます。 -
新しい順に番号が振られます。
📂 スタッシュの中身を確認
git stash show stash@{0}
-
変更されたファイル一覧を表示。
-
-p
を付けると差分も確認できます。
例:git stash show -p stash@{0}
♻️ スタッシュを適用
git stash apply stash@{0}
-
指定したスタッシュの内容を作業ディレクトリに復元します。
-
適用後もスタッシュは残ります。
🧹 スタッシュを適用して削除
git stash pop stash@{0}
-
内容を適用したあと、そのスタッシュを一覧から削除します。
-
「戻す&掃除」を同時にやるイメージ。
🗑 スタッシュを削除
git stash drop stash@{0}
-
指定したスタッシュを削除します。
git stash clear
-
全スタッシュを削除します。
💡 よくある応用パターン
1. 新規ファイルも一緒に退避
git stash -u
-
未追跡ファイル(.gitignoreされていないもの)も保存。
2. 特定ファイルだけスタッシュ
git stash push path/to/file1 path/to/file2
-
指定ファイルだけ退避できます。
3. ステージング状態も含めて復元
スタッシュはステージング情報も保持しているので、apply
や pop
するとステージング状態も復元されます。
📍 注意点
-
コミットの代わりではない:スタッシュはローカル専用で、リモートに共有されません。
-
永続的な保存には向かない:長期間残すと混乱しやすいので、使い終わったら早めに消す。
-
競合の可能性:適用時にベースが変わっているとコンフリクトが発生する場合があります。