メインコンテンツへスキップ

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. ステージング状態も含めて復元

スタッシュはステージング情報も保持しているので、applypop するとステージング状態も復元されます。


📍 注意点

  • コミットの代わりではない:スタッシュはローカル専用で、リモートに共有されません。

  • 永続的な保存には向かない:長期間残すと混乱しやすいので、使い終わったら早めに消す。

  • 競合の可能性:適用時にベースが変わっているとコンフリクトが発生する場合があります。