git stash push -u才安全,因默认git stash仅暂存已跟踪文件修改,忽略??未跟踪文件(如.config.local.js),易致其在分支切换时丢失;-u参数强制包含所有未跟踪文件。

直接用 git stash push -u,别只敲 git stash —— 否则未跟踪文件(比如新生成的 .log、config.local.js)会丢。
为什么 git stash 默认不安全?
默认命令只暂存已跟踪文件的修改和暂存区内容,完全忽略 ?? 开头的未跟踪文件。而这类文件恰恰最常被 IDE 自动生成或手动新建,却最容易在切换分支时静默消失。
-
git stash→ 不含未跟踪文件 -
git stash push -u→ 强制包含所有未跟踪文件(-u即--include-untracked) - 如果还涉及忽略规则外的临时文件(如
node_modules),加-a(--all)才真正全量暂存
切换前必须确认的三件事
别跳过 git status —— 它是唯一能告诉你“到底脏在哪”的权威依据:
- 看有没有
modified:行:说明文件改了但没git add - 重点扫
??开头的行:这些是 Git 完全没记录过的新文件,-u参数就为它们存在 - 留意 IDE 显示“已保存”但
git status仍报脏:那是编辑器缓存假象,以git status为准;必要时执行git update-index --refresh
恢复时别用 git stash apply 直接硬上
git stash pop 是更稳妥的选择,因为它会在应用后自动删掉对应 stash 条目,避免重复恢复导致冲突叠加。
- 如果
pop出现冲突,Git 会明确标出冲突文件,停在那里等你处理 —— 这是保护机制,不是失败 - 想恢复特定 stash?先
git stash list,再git stash pop stash@{1} - 误删了 stash?
git fsck --lost-found可能找回,但别指望它 —— stash 后立刻git stash show -p确认内容才是正解
最常被忽略的其实是“未跟踪文件”和“IDE 本地历史”根本不是一回事:前者由 Git 管理,后者只是编辑器快照,切分支时不会跟着走。stash 前不看 ?? 行,等于主动扔代码。











