撤销操作详解:restore、reset、revert的正确使用与风险
在面试和实际工作中最常遇到的问题之一就是如何撤销已做的修改。我们将深入解析三个具有不同'撤销深度'的Git工具,重点讲解最关键的部分:展示具体场景,说明reset --hard如何破坏团队协作,以及revert作为安全替代方案的优势。通过真实案例,分析正确和错误决策带来的实际后果。
- 掌握在任何阶段(工作区、暂存区、提交历史)都能自信地撤销修改的能力
- 深刻理解reset和revert的根本区别,并知道在何种情况下使用哪种命令更合适
- 学会避免在团队协作仓库中进行撤销操作时新手常犯的典型错误
Phần đầu bài giảng
Git restore:文件的撤销按钮
- Git restore — 撤销未提交的更改
- 就像编辑器中的'撤销'按钮
- 安全 — 不会改变提交历史
- 将文件恢复到最近一次保存的状态
想象一下,您不小心保存了一个有错误的文件,想要恢复原状。Git restore就像一个神奇的撤销按钮 — 它可以将文件恢复到最近一次提交的状态。与其他撤销命令不同,restore只对未提交的更改有效,对项目历史记录完全安全。当您需要快速修复意外修改而又不想影响历史记录时,这是首选工具。
撤销工作目录中的更改
- git restore file.txt — 将文件恢复到最近一次提交
- 撤销工作目录中的所有更改
- 安全 — 可以通过编辑器恢复更改
- 恢复前请检查git status状态
假设您花了半小时修改配置文件,但发现自己走错了方向。与其手动撤销每个更改,不如执行git restore config.yml。文件会立即恢复到最近一次提交的状态。就像您没有保存就关闭了文件,但可以确保返回到可用版本。
# 演示文件恢复
$ echo "错误的修改" > main.py
$ git status
$ git restore main.py
$ cat main.py
$ git status
从索引中移除文件
- git restore --staged file.txt — 从索引中移除文件
- 保留工作目录中的更改
- 注意:不加 --staged 会丢失更改
- 执行前务必检查 git status
一个常见错误是不小心将多余文件添加到索引中。比如,您执行了 git add . 并意外添加了临时配置文件。使用带有 staged 标志和文件名 settings.tmp 的 git restore 命令可以安全地将其从索引中移除,同时保留工作目录中的所有更改。如果不加 staged 标志,您可能会丢失工作成果,因此在执行 restore 前务必用 git status 检查状态。现在您已经学会了如何撤销提交前的更改。但如果错误已经进入历史记录呢?这时就需要用到 git reset。
# 意外将文件添加到索引
$ git add config.tmp
$ git status
# 从索引中移除,保留更改
$ git restore --staged config.tmp
$ git status
# 检查文件是否仍在工作目录中
$ ls -la config.tmp
Bài giảng đầy đủ dành cho thuê bao
Còn 24 slide nữa trong phiên bản đầy đủ.
Video, toàn bộ slide, ghi chú, bài kiểm tra, gia sư AI và phỏng vấn sẽ mở sau khi đăng nhập và đăng ký thuê bao.
Đăng nhập hoặc đăng ký Đăng ký thuê baoNội dung bài giảng
- Git restore:文件的撤销按钮
- 撤销工作目录中的更改
- 从索引中移除文件
- Git reset:历史回滚的工作原理
- 安全的 reset --soft:更改保留在索引中
- 标准 reset --mixed:工作目录中的更改
- 危险的 reset --hard:永久删除
- Reset:三种模式,一个命令
- git reset --soft:安全重写历史
- 何时使用 --mixed 和 --hard
- 检查清单:如何选择reset?
- 为什么不能直接删除错误?
- git revert在实际中如何工作
- 一次性撤销多个提交
- Reset:本地重写历史记录
- Revert:安全地撤销更改
- 推送时会发生什么:reset vs revert
- 为什么 reset --hard 很危险
- 数据丢失示例
- 如何恢复数据
- 共享分支回滚的风险
- 通过 revert 安全回滚
- 正确的操作步骤
- 何时使用:restore、reset 还是 revert
- 个人历史记录与共享历史记录的处理规则
- 错误处理分步指南
- 总结与任务:撤销操作大师
Bài viết liên quan đến bài học này
- Lệnh Git: bảng tra cứu với ví dụ dùng hằng ngày
- git checkout, switch và restore: khi nào dùng cái nào
- git reset và git revert: cách hoàn tác commit mà không phá lịch sử nhóm
- git reflog: cách khôi phục commit và nhánh đã mất
- Git và GitHub: khác nhau thế nào và liên hệ ra sao
Tất cả bài giảng của khóa học
- 从零开始:成为自信的Git开发者
- 为什么必须掌握Git——不懂Git就找不到工作的原因
- 安装与配置:准备首次使用Git
- 第一个仓库:init、add、commit 和索引的魔力
- 版本控制历史解读:log、diff、show 与历史记录导航
- Git分支:代码的平行宇宙
- 撤销操作详解:restore、reset、revert的正确使用与风险
- GitHub与远程仓库:将代码存入云端
- 团队协作:Fork、功能分支和拉取请求
- 代码合并冲突:不慌张,理解与解决之道
- 真实团队中的Git流程:如何选择适合的工作流
- 高级 Git 工具:rebase、stash、cherry-pick 和标签
- 期末项目:模拟真实团队开发