紧急修复前须确认工作区干净,未提交修改会导致切分支失败;推荐用 git stash 暂存,或 git restore 丢弃;用 git switch main 安全切换,修复后用 git switch - 回原分支再 git stash pop 恢复。

紧急修复前必须确认工作区是否干净
直接切分支失败,八成是因为当前有未提交的修改。Git 默认拒绝切换,怕你丢代码。它报的错通常是:error: Your local changes to the following files would be overwritten by checkout。
这时候别硬切,先看状态:git status。如果看到一堆 modified 文件,说明你正处在“不能走”的状态。
- 想保留这些修改 → 用
git stash暂存(推荐) - 确定不要这些修改 →
git restore .或git checkout -- .丢弃全部(慎用) - 只丢弃某几个文件 →
git restore path/to/file.js
用 git switch 快速切到修复分支(Git 2.23+)
假设线上 Bug 在 main 分支,而你当前在 feature/login 上,最安全的切法是:
git switch main
这条命令会自动拉取远程最新(如果本地没跟踪),并确保你站在干净的 main 头上。它比 git checkout main 更明确,不会误触发文件恢复逻辑。
- 如果
main本地不存在,但远程有 →git switch main仍能成功(前提是已执行过git fetch) - 如果远程名不是
origin(比如是upstream)→ 显式指定:git switch -c main upstream/main - 切完立刻验证:
git branch看星号是否在main前,再git log -1 --oneline确认 HEAD 是最新提交
修复完怎么回到原分支且还原修改
修完 Bug 提交、推送到远程后,别急着 git switch feature/login —— 那样你会丢失刚才 stash 的那堆未提交代码。
- 先切回去:
git switch -(注意是短横线,不是破折号)→ 自动跳回上一个分支 - 再恢复暂存:
git stash pop→ 把修改放回工作区,且清空最近一次 stash - 如果
pop出现冲突(比如你在两个分支都改了同一行),Git 会标出 git add +git stash drop清理
别用 git stash apply 代替 pop,除非你明确想保留 stash 记录——多数人忘了删,攒一堆无用 stash 反而干扰判断。
为什么 git stash pop 后文件变成未暂存状态
这是 Git 的默认行为:stash 保存的是「暂存区 + 工作区」的快照,但 pop 时只还原内容,不还原暂存状态。所以你看到所有文件都是 modified 而非 staged。
- 想一键重暂存全部 →
git add . - 只想暂存部分 →
git add file1.js file2.css - 如果原来就只暂存了几个文件,现在全变 modified,说明你之前可能漏了
git add,或者用了git stash -k(keep-index)但没注意参数含义
这个细节容易被忽略:stash 不是“快照粘贴”,而是“内容还原”,暂存状态得自己补。紧急修复节奏快,一不留神就多敲一遍 git add。


















