好的,阿杰,我们来系统梳理一下 “版本回退”在 Git 中的几种方式,重点讲解 revert 的用法及区别


1️⃣ 版本回退的概念

在 Git 中,“版本回退”主要有三种常用方式:

  1. git reset
    • 直接移动 HEAD 指针
    • 可以修改暂存区和工作区
    • 常用于本地撤销提交
    • 危险性:会修改历史,慎用于共享分支
  2. git checkout / git restore
    • 用于撤销工作区或暂存区修改
    • 不会修改提交历史
  3. git revert
    • 创建一个新的提交,撤销指定提交的内容
    • 安全:不会修改已有提交历史
    • 常用于公共分支回退

2️⃣ git revert 详解

2.1 概念

  • revert 用于 撤销某次提交的内容,但保留历史
  • 会生成一个 新的提交,把原来提交的改动反向应用

2.2 基本语法

# 撤销指定提交
git revert <commit_id>

# 撤销多个提交(按时间顺序从旧到新)
git revert <old_commit>^..<new_commit>

2.3 示例

假设提交历史如下:

A - B - C - D  (HEAD)
  • 想撤销 C 的修改:
git revert <C的commit_id>
  • 历史变为:
A - B - C - D - C'  (HEAD)
  • C' 是新提交,内容与 C 相反

2.4 常用选项

选项说明
--no-commit不立即生成提交,可手动修改后再提交
--edit编辑提交信息
-m <parent-number>用于撤销 merge 提交,需要指定主父分支

3️⃣ revert vs reset 对比

特性revertreset
修改历史不修改历史,安全修改历史,危险(慎用公共分支)
生成提交会生成新的提交不生成提交(除非用 --soft 只重置 HEAD)
公共分支使用安全不建议
撤销范围单条或多条提交HEAD 指定范围

4️⃣ 使用场景

  1. 公共分支撤销错误提交 → git revert
  2. 本地错误提交,不影响远程 → git reset 或 git revert
  3. 临时撤销工作区修改 → git restore 或 git checkout

小结口诀

reset 改历史,revert 生成逆向提交,checkout/restore 改工作区