0%
Published on

Git 回滚与撤销

Authors

本地未提交

阶段典型场景命令作用说明💻 实战操作步骤(一步步)
本地未提交🧩 我只是改了文件,还没 git add,想放弃这些修改git restore .撤销所有未暂存的改动,让文件回到上次提交状态① 修改了 index.js 的几行代码
② 还没执行 git add
③ 后悔了,不想要这些改动 → 执行:git restore .
④ 文件立刻回到修改前的样子
本地未提交🧩 只想撤销某个文件的修改git restore index.js只恢复一个文件,不影响其他文件① 修改了 index.jsstyle.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> 恢复
View on GitHub