如何使用 Git 实现 revert

一、git revert 核心概念

git revert最安全的代码回退方式 ,它不会删除/修改历史提交记录,而是生成一个新的提交,用这个新提交来"抵消"目标提交的所有修改。这种方式适合:

  • 已推送到远程仓库的代码(避免修改公共历史)
  • 需要保留回退痕迹、便于追溯的场景
  • 团队协作中回退代码(不影响他人工作)

二、git revert 完整操作步骤(以你的机械臂场景为例)

步骤 1:查看提交历史,找到要撤销的 Commit ID

先通过日志找到需要撤销的目标提交的哈希值(前7位即可):

bash 复制代码
# 查看简洁的提交历史(推荐)
git log --oneline

# 查看详细的提交历史(包含作者、时间、完整Commit ID)
git log

示例输出(--oneline 模式):

复制代码
a87b9c0 (HEAD -> main) 优化机械臂J3角度判断逻辑
5d6e7f8 初始化机械臂笛卡尔坐标获取
9b8a7s6 新增手型切换基础逻辑

假设你要撤销的是 a87b9c0 这个"优化J3角度判断"的提交。

步骤 2:执行 git revert 撤销目标提交
基础用法(撤销单个提交)
bash 复制代码
# 撤销指定Commit ID的提交,会自动打开提交信息编辑器
git revert a87b9c0

执行后 Git 会自动生成一个默认的 revert 提交信息(比如 Revert "优化机械臂J3角度判断逻辑"),你可以按之前讲的规范修改(补充原因、关联工单等),修改完成后:

  • Esc 退出编辑模式
  • 输入 :wq 保存并退出(vim编辑器操作)
快速提交(无需打开编辑器)

如果不想手动编辑提交信息,可直接用 -m 参数指定信息:

bash 复制代码
git revert a87b9c0 -m "revert: 撤销机械臂J3角度判断逻辑的修改 (#123)

原因:J3角度范围判断覆盖不全,导致手型误判
撤销的提交ID:a87b9c0"
步骤 3:处理 revert 过程中的冲突(常见场景)

如果目标提交的修改和当前代码有冲突(比如你在撤销前又改了同一行代码),Git 会提示冲突,此时:

  1. 查看冲突文件:

    bash 复制代码
    git status

    冲突文件会被标记为 both modified

  2. 打开冲突文件,手动解决冲突:
    冲突处会显示如下格式,你需要保留正确的代码,删除冲突标记:

    复制代码
    <<<<<<< HEAD
    # 当前分支的代码
    elbow_x = shoulder_x + 10  # 现有逻辑
    =======
    # 被撤销提交的代码
    elbow_x = shoulder_x + 5   # 要撤销的逻辑
    >>>>>>> a87b9c0 (优化机械臂J3角度判断逻辑)
  3. 解决冲突后,标记文件为已解决,并完成 revert:

    bash 复制代码
    # 标记冲突文件已解决
    git add 冲突文件名.py
    # 完成 revert 提交
    git revert --continue

    如果想放弃这次 revert,执行:

    bash 复制代码
    git revert --abort
步骤 4:推送 revert 提交到远程仓库

撤销完成后,将新生成的 revert 提交推送到远程(比如 main 分支):

bash 复制代码
git push origin main

三、进阶场景:撤销多个提交/合并提交

1. 撤销连续的多个提交

比如要撤销 a87b9c09b8a7s6 之间的所有提交(注意顺序:旧提交在前,新提交在后):

bash 复制代码
git revert 9b8a7s6..a87b9c0
2. 撤销合并提交(需指定父节点)

如果要撤销的是合并分支的提交,需要加 -m 参数指定父节点(通常用 1 表示主分支):

bash 复制代码
# 撤销合并提交(Commit ID为合并提交的ID)
git revert 合并提交ID -m 1

四、git revert vs git reset(新手必区分)

特性 git revert git reset
历史记录 保留所有提交(新增revert提交) 删除指定提交后的所有记录
适用场景 已推送的远程代码 本地未推送的代码
团队协作 安全(不影响他人) 危险(会覆盖远程历史)
可追溯性 强(能看到撤销过程) 弱(历史记录被删除)

总结

  1. git revert 是安全的回退方式,核心是生成新提交抵消旧修改,适合已推送的代码。
  2. 核心操作流程:查看Commit ID → 执行git revert → 处理冲突(如有)→ 推送远程
  3. 提交信息要包含「操作类型+撤销原因+目标Commit ID」,便于团队追溯。
相关推荐
vibecoding日记12 小时前
为什么我就想要「线性历史 + Signed Commits」,GitHub 却把我当猴耍 🤬🎙️
git·编程工具
程序员小崔日记1 天前
如何将代码轻松上传到 Gitee?Git 使用全攻略!
git·gitee·上传
Bigger2 天前
为什么你的 Git 提交需要签名?—— Git Commit Signing 完全指南
git·开源·github
DianSan_ERP3 天前
电商API接口全链路监控:构建坚不可摧的线上运维防线
大数据·运维·网络·人工智能·git·servlet
红豆子不相思3 天前
Tomcat 环境搭建与集群实战
服务器·git·tomcat
杰哥技术分享3 天前
Git 仓库迁移技术文档:从 CODING.net 迁移至腾讯云 CNB
git
梅孔立3 天前
Ansible 100 台服务器一键管控实战 进阶版
服务器·git·ansible
qq_426003963 天前
git切换当前分支到远程分支
git
ON10N4 天前
100% 纯 Vibe Coding,我是怎么用 AI 撸出一个 VS Code 插件的
git·ai编程·visual studio code