news 2026/5/28 2:26:53

Git 操作后悔药:reset、revert、cherry-pick 详解,拯救你被覆盖的生产环境代码

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Git 操作后悔药:reset、revert、cherry-pick 详解,拯救你被覆盖的生产环境代码

🚑 前言:不要慌,Git 很难丢数据

Git 的设计哲学是“只增不减”。只要你 commit 过,哪怕你删了分支、重置了指针,代码大概率还在.git目录的深处躺着。
我们需要的,只是找到正确的工具把它捞回来,或者把错误的修改抹掉。


⏪ 一、 时光倒流:git reset (重置)

场景:你刚提交了几个 commit,发现代码写得太烂,或者提交信息写错了,想在本地撤销这些提交,重头再来。

核心原理:移动HEAD指针,让 Git 认为“那些提交从未发生过”。

三种模式对比:

模式命令参数HEAD 指针暂存区 (Index)工作区 (Work Dir)用途
Soft--soft回退保留保留最常用。撤销 commit,但代码还在,方便修改后重新提交。
Mixed--mixed回退重置保留默认模式。代码还在,但需要重新git add
Hard--hard回退重置重置 (丢失)危险!彻底回到过去,未提交的改动全丢。

实战命令:

# 1. 后悔药:撤销最近一次 commit,但保留代码修改gitreset--softHEAD^# 2. 毁灭打击:彻底回退到某个版本 (慎用!)gitreset--harda1b2c3d

⚠️ 禁忌绝对不要在公共分支(如 master/main)上使用git reset并强推 (git push -f)!这会导致同事的代码被你覆盖,引发团队格斗。


🛡️ 二、 公开致歉:git revert (反做)

场景:错误的 commit 已经推送到远程master分支了,你需要回滚,但不能使用reset(因为会破坏历史记录)。

核心原理:生成一个新的 commit,它的内容是**“反向”**操作。如果原 commit 是“新增一行”,revert commit 就是“删除那一行”。

Reset vs Revert 流程图 (Mermaid):

Revert (负荆请罪)

git revert C

Commit A

Commit B

Commit C: 错误代码

Commit D: 撤销了 C 的修改

Reset (时光倒流)

git reset --hard B

Commit A

Commit B

Commit C

HEAD 指向 B, C 消失

实战命令:

# 撤销指定的 commit idgitrevert a1b2c3d# 如果撤销产生了冲突,手动解决后:gitadd.gitrevert--continue

优点:历史记录清晰,每一笔操作都有迹可循,适合生产环境回滚。


🍒 三、 精准手术:git cherry-pick (摘樱桃)

场景:这是最高频但也最容易被忽略的场景。
你在dev分支开发新功能时,顺手修复了一个紧急 Bug (Commit Hash:fix001)。
现在,产品经理要求:“新功能不上线,但这一个 Bug 修复必须立刻上prod分支!”
你怎么把这一个commit 弄过去?切分支重写一遍?No!

核心原理:将其他分支的某一个(或几个)commit,复制一份应用到当前分支。

实战流程:

  1. 切换到目标分支(比如prod)。
  2. 执行 cherry-pick。
# 1. 切换到生产分支gitcheckout prod# 2. 把 dev 分支上的那个修复 commit "摘" 过来gitcherry-pick fix001

** Cherry-pick 逻辑演示 (Mermaid)😗*

Prod 分支

Dev 分支

git cherry-pick D2

Commit D1

Commit D2: 修复 Bug

Commit D3

Commit P1

Commit P2

Commit P3: 修复 Bug 的副本

高级技巧:

  • 批量摘取git cherry-pick A..B(不包含A,包含B)。
  • 遇到冲突:和 merge 冲突一样,解完冲突后git add .然后git cherry-pick --continue

😇 四、 上帝视角:git reflog (终极后悔药)

场景:你手贱执行了git reset --hard,把刚写的一堆代码弄丢了,而且连 commit ID 都忘了!这时候你想跳楼?

别急,Git 记录了你每一次HEAD 指针的移动(包括 reset, checkout, commit)。

实战命令:

# 查看所有操作记录 (包括被 reset 掉的)gitreflog

输出示例:

a1b2c3d HEAD@{0}: reset: moving to HEAD^ e4f5g6h HEAD@{1}: commit: 完成了核心功能 <-- 这里!你丢失的代码在这里!

复活代码:

# 只要找到那个 hash,就能跳回去gitreset--harde4f5g6h

🎯 总结

命令关键词适用场景安全性
git reset悔棋本地分支撤销提交,整理代码⚠️ 危险 (慎用 --hard)
git revert补救公共分支/生产环境回滚代码✅ 安全
git cherry-pick复制跨分支同步特定的 Bug 修复✅ 安全
git reflog复活找回被误删/重置的 commit🆘 救命专用

Next Step:
现在就在你的测试仓库里试一下git reset --hard然后用git reflog把它找回来。这种心跳的感觉,体验一次你就再也不会忘。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/26 13:52:07

临终关怀应用:病人最爱的人声由VoxCPM-1.5-TTS-WEB-UI永久保存

临终关怀中的声音传承&#xff1a;用AI永久保存至亲之音 在重症监护室的灯光下&#xff0c;一位老人轻声对孩子说“别怕&#xff0c;爸爸一直都在”。这句温柔的话语&#xff0c;或许将成为他最后的遗言。但今天&#xff0c;这句话不再只是记忆中模糊的回响——借助人工智能&am…

作者头像 李华
网站建设 2026/5/26 13:51:55

电商运营(浅数据看销量,大数据看趋势,深数据挖需求)

在数字化电商竞争的深水区&#xff0c;数据已从“辅助工具”升级为“核心竞争力”。多数运营者困于“只见销量波动&#xff0c;不见增长本质”&#xff0c;核心问题在于对数据的挖掘深度不足。真正高效的电商运营&#xff0c;需建立“浅-大-深”三层数据思维&#xff1a;浅数据…

作者头像 李华
网站建设 2026/5/21 0:14:08

导师严选10个AI论文写作软件,助本科生轻松搞定毕业论文!

导师严选10个AI论文写作软件&#xff0c;助本科生轻松搞定毕业论文&#xff01; AI工具如何成为论文写作的得力助手 随着人工智能技术的不断进步&#xff0c;越来越多的AI工具被引入到学术写作领域&#xff0c;为本科生提供高效、便捷的支持。尤其是在论文写作过程中&#xff0…

作者头像 李华
网站建设 2026/5/20 12:15:34

CSDN官网夜间模式适配长时间阅读VoxCPM-1.5-TTS文档

VoxCPM-1.5-TTS&#xff1a;让技术文档“开口说话”的夜间阅读新体验 在程序员的日常中&#xff0c;通宵阅读 CSDN 上一篇万字长文、反复研读某框架源码解析或啃下一份晦涩的技术白皮书&#xff0c;并不罕见。然而&#xff0c;长时间盯着屏幕带来的视觉疲劳&#xff0c;往往让人…

作者头像 李华
网站建设 2026/5/23 8:38:13

MIT License版本Sonic允许自由修改与商用

MIT License版本Sonic允许自由修改与商用 在短视频、直播电商和在线教育高速发展的今天&#xff0c;虚拟内容的生产效率正面临前所未有的挑战。如何以更低的成本、更快的速度生成高质量的数字人视频&#xff1f;传统方案依赖3D建模与动作捕捉&#xff0c;不仅流程繁琐&#xff…

作者头像 李华
网站建设 2026/5/26 13:52:06

uniapp+ssm医院预约挂号小程序

目录摘要项目技术支持论文大纲核心代码部分展示可定制开发之亮点部门介绍结论源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作摘要 医院预约挂号小程序基于Uniapp和SSM框架开发&#xff0c;旨在优化传统挂号流程&#xff0c;提升患者就医效…

作者头像 李华