git stash用于临时保存未提交修改以实现干净切换分支;默认不保存未跟踪文件,可用git stash -u包含它们,配合-m添加说明便于后续识别和恢复。

正在开发新功能,改到一半突然要切分支修紧急 bug,但本地有一堆未提交的修改,直接 git checkout 会报错提示“Your local changes would be overwritten”,这时必须先把当前未提交的代码临时藏起来,让工作区变干净。
基础暂存:用 git stash 保存全部修改
执行命令:git stash
这一步会把当前工作区和暂存区的所有已跟踪文件的修改打包存入 stash 栈顶,执行后 git status 显示 clean。注意:它【默认不保存未跟踪的新文件(untracked files)】,比如你刚新建的 utils/helper.js 但还没 git add 过,这条命令不会把它收进去。
验证是否成功:运行 git stash list,能看到类似 stash@{0}: WIP on main: abc1234 feat: login UI 的输出。
带说明的暂存:避免后期混淆哪条 stash 是什么内容
方法一:用 save 子命令加描述git stash save "登录页表单校验逻辑未完成"
方法二(推荐,更现代):用 push + -mgit stash push -m "登录页表单校验逻辑未完成"
两种写法效果一致,但 push 是官方推荐的长期替代方案。加说明不是可选项——当你 stash 多次后,stash@{0}、stash@{1} 这种编号根本看不出区别,没备注等于给自己埋雷。
连未跟踪文件一起暂存
第一步:确认哪些是未跟踪文件git status --porcelain | grep "^?? "
使用约定式提交(Conventional Commits)从 Git 历史记录中生成结构化变更日志,支持多种格式、AI 增强型描述以及可自定义的范围……
第二步:用 -u 参数一并暂存git stash -u
第三步:检查是否生效git status 应无任何输出;再运行 git stash show -p stash@{0},能看到新增文件的完整 diff 内容。
【-u 不会暂存 .gitignore 里明确忽略的文件】,如果连被忽略的临时文件也要存(极少见),得用 git stash -a。
验证暂存结果并切换分支
① 运行 git status → 确认输出为 “nothing to commit, working tree clean”
② 运行 git branch → 看清当前所在分支名
③ 执行 git checkout main 或 git switch main → 此时不再报错,可自由切换
这三步必须按顺序做,跳过第①步就切分支,可能误判工作区状态;第②步看似多余,但多人协作中分支名常含 feature/、hotfix/ 前缀,看错分支会导致修错地方。










