- Published on
Git 回滚与撤销
- Authors
- Name
- Piggy DP
- @xiaozhudxiaozhu
本地未提交
阶段 | 典型场景 | 命令 | 作用说明 | 💻 实战操作步骤(一步步) |
---|---|---|---|---|
本地未提交 | 🧩 我只是改了文件,还没 git add ,想放弃这些修改 | git restore . | 撤销所有未暂存的改动,让文件回到上次提交状态 | ① 修改了 index.js 的几行代码② 还没执行 git add ③ 后悔了,不想要这些改动 → 执行: git restore . ④ 文件立刻回到修改前的样子 |
本地未提交 | 🧩 只想撤销某个文件的修改 | git restore index.js | 只恢复一个文件,不影响其他文件 | ① 修改了 index.js 和 style.css ② 只想还原 index.js → 执行:git restore index.js ③ 结果: index.js 变回原样,style.css 改动保留 |
本地未提交 | 🧩 改完代码后执行了 git add ,现在想取消暂存 | git restore --staged . | 撤销暂存(取消 git add ),但保留修改 | ① 改了文件并执行 git add . ② 想重新修改内容再提交 → 执行: git restore --staged . ③ 暂存区清空,但工作区改动还在 |
本地未提交 | 🧩 改乱了,啥都不想要了 | git reset --hard | 丢弃所有改动(包括暂存和未暂存),回到上次提交 | ① 改了好多文件,方向错了 ② 执行: git reset --hard ③ 全部恢复成上次提交的样子,像啥都没改过 |
本地未提交 | 🧩 写到一半要去别的分支修 bug,但不想提交未完成的代码 | git stash | 暂时保存当前修改(不提交),之后可以恢复 | ① 写到一半被叫去修 bug ② 执行: git stash ③ 工作区变干净,可安全切分支 ④ 修完后回来执行: git stash pop → 改动恢复 |
本地已提交但未推送
阶段 | 典型场景 | 命令 | 作用说明 | 💻 实战操作步骤 |
---|---|---|---|---|
本地已提交 | 🧩 刚提交完才发现 commit 信息写错了 | git reset --soft HEAD~1 | 撤销上次 commit,但保留暂存区内容(代码不丢) | ① 执行了 git commit -m "写错的注释" ② 才发现写错了 ③ 执行: git reset --soft HEAD~1 ④ 修改注释或代码后重新提交: git commit -m "正确的注释" |
本地已提交 | 🧩 提交了,但发现代码写漏了点,要改再提交 | git reset --mixed HEAD~1 | 撤销上次 commit,保留代码但移出暂存区 | ① 执行了 git commit -m "忘记一个文件" ② 想重新修改后再提交 → 执行: git reset --mixed HEAD~1 ③ 改完后再执行: git add . && git commit -m "补上忘记的文件" |
已推送
阶段 | 典型场景 | 命令 | 作用说明 | 💻 实战操作步骤 |
---|---|---|---|---|
已推送 | 🧩 已推送到 GitHub 后发现某次提交错了,想撤销但不影响别人 | git revert <commit_id> | 创建一个新的“反向提交”,安全回滚(不破坏历史) | ① 已执行 git push origin main ② 发现某个提交错了 → 执行: git log 找到那次提交的 IDgit revert 7a8b9c0 ③ 会自动生成一个“撤销提交”,再推送: git push origin main ④ ✅ 历史安全,别人不会受影响 |
已推送 | ⚠️ 想直接回到旧版本(危险!会改写历史) | git reset --hard <commit_id>``git push --force | 强制将远程历史回滚,适合自己维护的分支 | ① 在个人分支上测试多次 ② 想回到第 3 次提交 → 执行: git log 找到旧提交 IDgit reset --hard 3fa1c2 git push origin my-branch --force ③ ⚠️ 历史被改写,别的协作者会丢记录 |
已推送 | 🧩 误操作导致提交丢失,想找回 | git reflog + git reset --hard <commit_id> | git reflog 可查看所有 HEAD 变动历史,从而恢复丢失版本 | ① 执行了 git reset --hard 后后悔了② 执行: git reflog 查看 HEAD 的历史记录③ 找到丢失的提交 ID ④ 执行: git reset --hard <commit_id> 恢复 |