Git|git stashで未追跡ファイルが保存されない!?対処法と注意点まとめ

Git stashが未追跡ファイルを保存しない問題と、その対処法をまとめた。

7/15/2025

はじめに

機能開発の途中で、以前提出していたPRに修正箇所が発生した。
今の作業を中断して、別のブランチで修正対応をしたい。

現在のブランチ上では、ステージ前の変更や新規ファイルがたくさん並んでいる。
コミットするにはまだまだ機能が完成していない(ぐちゃぐちゃな状態;)。

以前この状態でブランチを移動すると、ステージ前の状態が反映されて困ったことがある。

今回もgit stashを使用して、一旦ステージ前のを保留にする。と、予期しないことが起こった。


✅ やったこと

  1. 作業中の状態を一旦保存しようと git stash
  2. main ブランチに切り替え
  3. main から fix/〇〇〜 ブランチを新規作成して修正対応へ

❌ 問題発生

git stash したのに、新しく追加していたファイルがステージに残っていた。
main ブランチに移動しても、それらのファイルが残り続けてしまった。

つまり、stash が一部しか保存してくれていなかった


💡 原因

git stash追跡されているファイルの変更(mainとの差分) しか保存しない。

つまり、
新しく作ったファイル(未追跡ファイル)は、デフォルトでは stash に含まれない


✅ 解決策:未追跡ファイルも stash に含めたいときは?

以下のコマンドを使う必要があった。

git stash push -u -m "WIP: add-auth途中"

オプション

意味

-u または --include-untracked

未追跡ファイルも stash に含める

-a または --all

.gitignore のファイルも含める(注意が必要)


🔍 スタッシュの確認方法

git stash list

例:

stash@{0}: On add-Category: WIP: Add Category 
stash@{1}: On supabase: 保留中
stash@{2}: On add-authentication: WIP: add-auth途中

👀 中身を確認するには?

git stash show -p stash@{2}


🔄 指定した stash を復帰させたいとき

git stash pop stash@{2}

※指定しないと一番新しい stash@{0} が適用されてしまう。


💡 stash@{番号} の番号順は?

stash@{0} が一番新しい

そのまま git stash pop を実行すると、stash@{0} が現在のブランチに復帰される。

特定のものを復帰させたい場合は、必ず番号を指定して git stash pop stash@{番号} を使うこと。


🧹 使い終わった / 忘れていた stash を削除する

git stash list
stash@{1}: On supabase: 保留中
stash@{2}: On add-authentication: WIP: add-auth途中

これらは、すでに処理が終わっていた stash。
(stashで保留にしていたこと自体忘れて、またコードを書き直してしまったんだと思われる…)

✅ 削除方法

git stash drop stash@{番号}

✅ すべて一括削除する場合

git stash clear

⚠️ 削除した stash は復元できない。本当に不要かを確認してから削除すること。


おわりに

Git stash は便利だが、未追跡ファイルがデフォルトで保存されない点には注意が必要だった。
「stash したのにファイルが残ってる?」という経験をしたら、まず -u を思い出すようにしたい。

また、一つのコマンドで作業内容が混ざったり、誤って削除されたりすることもあるstash。(正直コワイ)
作業は小さく区切って、一つずつコミットして終わらせていく方が確実だと感じた。