核心是根据你的 当前操作状态 选择对应命令(不同场景命令不同,选错可能丢代码!)。先教你判断自己的场景,再分步骤操作,最后补充避坑提醒。
第一步:先判断你的「当前状态」(关键!)
执行以下命令,查看文件处于哪个阶段,再对应找方法:
git status
根据输出结果,匹配你的场景:
| 场景描述 | git status 输出特征 | 核心操作 |
|---|---|---|
场景 1:修改了文件,但没执行 git add(仅工作区修改) | 提示 modified: 文件名,且无 Changes to be committed | 直接丢弃工作区修改 |
场景 2:执行了 git add(已暂存),但没 git commit | 提示 Changes to be committed + modified: 文件名 | 先取消暂存,再丢弃修改 |
场景 3:已执行 git commit(本地仓库有新提交),想回滚到上一次 commit | 提示 nothing to commit, working tree clean | 回滚本地提交记录 |
场景 4:已 git push 到远程仓库(远程也有新提交),想回滚 | 远程仓库有对应的新提交记录 | 安全撤销远程提交(不删历史) |
第二步:分场景执行恢复操作(安全优先)
场景 1:仅工作区修改(没 git add)—— 直接丢弃修改
适合:改了文件但不想保留,想恢复到上一次 commit 的状态。
# 方法 1:Git 2.23 及以上版本(推荐,语法更清晰)
git restore 文件名 # 恢复单个文件,如 git restore src/App.vue
git restore . # 恢复所有修改的文件(谨慎!会丢弃所有未 add 的修改)
# 方法 2:兼容旧版本 Git(效果同上)
git checkout -- 文件名 # 如 git checkout -- src/App.vue
git checkout -- . # 恢复所有文件
✅ 效果:工作区文件直接回到上一次 commit 的状态,未 add 的修改全部丢弃(无法恢复,确认后再执行)。
场景 2:已 git add 暂存(没 git commit)—— 先取消暂存,再恢复
适合:不小心把不想提交的文件 git add 了,想撤销暂存并恢复到上一次 commit。
# 步骤 1:取消暂存(将文件从暂存区放回工作区)
# Git 2.23+ 推荐:
git restore --staged 文件名 # 单个文件,如 git restore --staged src/App.vue
git restore --staged . # 所有文件
# 旧版本 Git:
git reset HEAD 文件名
git reset HEAD .
git restore 文件名

