git reset vs git revert

Git reset 与 revert 的本质区别:本地重写 vs 公共冲销 Git 中的版本控制不仅是文件快照管理,更是协作环境下的历史账本机制。reset 通过移动 HEAD 指针重写本地提交历史,适用于未推送的修正场景;revert 则生成反向新 commit,保持历史线性与可审计性,是共享分支上安全回滚的唯一推荐方式。二者差异源于 Git 的分布式设计哲学:本地操作可塑,公共历史不可篡改。在数据工程、MLOps 和 CI/CD 流水线中,错误选用 reset 覆盖远程分支极易引发‘删库跑路’级事故,而 revert 结合 --no-commit 模式可实现可控预演。掌握 re 阅读详情

1.前言

在团队开发中,使用 Git 作为版本开发工具,可以便捷地协同多人管理并行开发,但是由于自己或者其他人代码提交污染了远程分支,就需要对远程代码进行恢复操作,Git 提供了reset和revert两种命令来进行恢复操作,这两种操作效果是截然不同的,不太清楚这个原理的同学需要了解一下,以免在实际的开发过程中翻车,导致线上远程仓库不可逆转的操作。

首先从英文释义来讲,reset是重置的意思,revert是恢复、还原的意思。

2.背景

在这里插入图片描述
Git 的每一次提交都是一次commit,上图可以看到在时间线上有三次提交,此时HEAD指向main分支,main分支又指向最新的Commit3。

HEAD是指向当前分支的最新提交的指针,可以在任意分支进行切换;

main(master)分支,是一个git代码仓库的主分支也是默认分支;

commit每一次提交代码都会产生一个commit id来标识工作区的变更与改动。

3.git reset

在github上创建一个空白的仓库,按照上图创建三次提交:
在这里插入图片描述
git reset的作用是将HEAD指向指定的版本上去:
在这里插入图片描述
使用git log查看提交记录:
在这里插入图片描述
这里可以看到我们提交了三次记录,我们现在想恢复到第一次commit 提交的时候。

使用git reset --hard命令操作:
在这里插入图片描述
此时我们可以看到已经恢复到了第一次提交代码的时候,目前我们是使用git reset --hard的方式,其实这里存在着三种方式,详情见我写的文章https://blog.youkuaiyun.com/fageaaa/article/details/146107438中的第10条。

这时候我们只是讲本地的 HEAD 指向了main 分支的 commit 1,但是远程并没有变更,此时需要强行推一下就可以了。

git push -f

此时我们可以看到远程也没有了,我们之前提交的三次记录而是只有第一次的提交记录。

在团队合作的共同操作一个仓库的时候, git reset 命令一定要慎重使用,在使用的时候一定要再三确认其他同学的代码是否会被重置操作而导致代码丢失,导致一些提交记录的丢失,这些都是不可逆的,一定要慎重。

4.git revert

git revert是用来重做某一个commit 提交的内容,在我们原始的提交之中,我们会发现分支上面有创建了一个新的 commit 提交,而此时我们对于想重做的某个 commit 提交的内容都不存在了:
在这里插入图片描述
在github上创建一个空白的仓库,按照上图创建三次提交:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
执行命令

git revert 8a189dc468ff360902238fb75858a5f520e57499

在这里插入图片描述
按:wq退出保存,再次git log:
在这里插入图片描述
在这里插入图片描述
可以看到111提交记录中的index1.txt文件已经被删除了。但此时有4条提交记录。

然后强制提交到远程:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.总结

git reset和git revert都是属于重新恢复工作区以及远程提交的方式,但这两种操作有着截然不同的结果:

  • git reset是将之前的提交记录全部抹去,将HEAD指向自己重置的提交记录,对应的提交记录都不复存在;
  • git revert操作是将选择的某一次提交记录重做,若之后又有提交,提交记录还存在,只是将指定提交的代码给清除掉。
Git reset vs revert vs cherry-pick:3种撤销/转移操作核心差异与选型指南 本文深入解析Git中reset、revert和cherry-pick三种撤销与移植操作的核心差异与应用场景。通过对比矩阵和实战案例,帮助开发者精准选择工具:reset用于本地历史修改,revert安全撤销已共享提交,cherry-pick实现跨分支代码移植。掌握这些技巧可有效避免版本控制事故,提升团队协作效率。 阅读详情

相关推荐

【图形学】Loop细分算法及半边结构实现(C++)

文章目录Loop 细分算法介绍增加新顶点更新旧顶点算法实现半边结构半边结构的表示方法半边结构的构造方法创建所有顶点创建所有面及半边半边结构的使用 Loop 细分 顾名思义,网格细分是将粗糙网格精细化的过程,如下动图。Loop细分是众多网格细分算法的一种,Loop细分仅仅对三角形网格模型有效。值得注意的是,虽然叫Loop细分,但是不能理解为“循环”细分,叫这个名字是因为作者的名字是这个而已。 下面是一个粗糙的兔子模型1000个面,进行3次细分 算法介绍 Loop细分算法主要分两步进行 增加新顶点:增加

wk_119的博客 8066

git reset --hard HEAD与git revert HEAD区别(简单明了!)

git revert 撤销 某次操作,此次操作之前和之后的commit和history都会保留,并且把这次撤销 作为一次最新的提交 * git revert HEAD 撤销前一次 commit * git revert HEAD^ 撤销前前一次 commit * git revert commit (比如:fa042ce57ebbe5bb9c8db709f719cec2c58ee7ff)撤销指定的版本,撤销也会作为一次提交...

HD243608836的博客 2986

YOLOV8多模态(可见光+红外光目标检测任务,基于Ultralytics官方代码实现)

torch 2.3.1 torchvision 0.18.1 Python 3.8.19 tensorrt 8.5.3.1DroneVehicle数据集下载地址DroneVehicle 数据集由无人机采集的 56,878 张图像组成,其中一半是 RGB 图像,其余是红外图像。我们为这 5 个类别制作了丰富的注释,其中包含定向边界框。其中,汽车在 RGB 图像中有 389,779 个注释,在

Mjy的博客 7585

git revert 用法

git revert 撤销 某次操作,此次操作之前和之后的commit和history都会保留,并且把这次撤销 作为一次最新的提交 * git revert HEAD 撤销前一次 commit * git revert HEAD^...

测试0901-1 696

手把手教你用8位单片机IO口直接驱动WS2812灯带(附完整代码和避坑指南)

本文详细介绍了如何使用8位单片机IO口直接驱动WS2812灯带,包括硬件准备、时序生成、色彩引擎与特效算法的实现,以及调试技巧与性能优化。通过汇编语言优化和精确时序控制,实现高效的LED驱动和炫酷的彩虹灯效,适合嵌入式开发者和硬件爱好者参考。

weixin_42696271的博客 304

微信小程序后台定位与实时位置更新的实战指南

本文提供了微信小程序实现后台定位与实时位置更新的完整实战指南。针对小程序退到后台后位置更新中断的痛点,详细解析了基于`startLocationUpdateBackground`API的后台定位解决方案。内容涵盖从隐私协议配置、项目权限声明,到授权、启动、监听、停止的核心代码流程,并分享了真机调试、性能优化及权限引导等关键避坑经验,帮助开发者构建稳定可靠的后台位置服务。

weixin_29008055的博客 468

简单易懂的Git回滚操作(reset、revert)

本文总结了两种解决方法:回退(reset)、反做(还原)(revert)。

张先生的前端日志 1万+

别再凭感觉选电容了!手把手教你计算电机控制器里的母线电容(附Excel计算工具)

本文详细解析了电机控制器中母线电容的选型方法,从理论计算到工程实践,帮助工程师避免常见误区。通过精确计算纹波电压、电容容量等关键参数,并结合薄膜电容与电解电容的性能对比,提供实用的选型建议。附带的Excel计算工具可快速完成参数计算,适用于工业伺服驱动和电动车电机控制器设计。

weixin_28720573的博客 518

【git revert】使用以及理解(详解)

因为git revert是用一次逆向的commit“中和”之前的提交,因此日后合并老的branch时,导致这部分改变不会再次出现,但是git reset是之间把某些commit在某个branch上删除,因而和老的branch再次merge时,这些被回滚的commit应该还会被引入。其中 G’ 是对 G 的 revert 操作生成的 commit,把之前撤销合并时丢弃的代码恢复了回来,然后再把tom的分支merge到master分支上,把解决 bug 写的新代码合并到 master 分支。

READLEAF的博客 3598

R语言生存分析

自己整理编写的R语言常用数据分析模型的模板,原文件为Rmd格式,直接复制粘贴过来,作为个人学习笔记保存和分享。部分参考薛毅的《统计建模与R软件》和《R语言实战》生存分析是研究生存时间的分布规律,以及生存时间和相关因素之间关系的一种统计分析方法。生存分析在医学科学研究中具有广泛而重要的应用价值,它对人群寿命的研究,各种慢性疾病的现场追踪研究,临床疗效试验和动物试验等研究中随访资料的处理骑着举足轻重的作

Tiaaaaa的博客 2万+

electron windows设置镜像地址环境变量报错npm error `ELECTRON_MIRROR` is not a valid npm option

如果你是在使用某个特定的脚本或配置文件,请检查该文件中是否有不正确的配置项,并进行相应的修正。确保你遵循electron的官方安装指南,并且没有包含不必要的或错误的配置选项。如果问题依然存在,可以查看npm的官方文档或者相关社区获取更多帮助。

qq_36158551的博客 3323

【Git】Git Revert 命令详解

与 Git Reset 不同,Git Revert 不会更改提交历史,而是会创建一个新的提交来撤销指定提交的更改。如果你想要撤销多个连续的提交,你可以使用 `-n` 选项(表示“no commit”)来撤销更改,并在最后一次性提交这些更改。这将创建一个新的提交,该提交撤销了 `<commit-hash-1>` 和 `<commit-hash-2>` 的更改。- 在使用 Git Revert 之前,请确保你已经完全理解了要撤销的提交的内容,以及撤销这些提交可能对项目产生的影响。# 撤销更多提交(如果有的话)

hqyhqyhq的专栏 1233

华为od 面试八股文_Spring_03_含答案

控制反转IOC是一个很大的概念,可以用不同的方式来实现。其主要实现方式有两种:依赖注入和依赖查找依赖注入;

MISAYAONE的博客 2341

Git Reset VS Git Revert

每天早上七点三十,准时推送干货Hello,大家好,我是阿粉,之前给大家介绍过 Git 的几个超级实用的命令,没看过的朋友可以去看一下那些你应该知道的,但是你一定不知道的 Git 骚操作...

Java极客技术 413

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

git revert VS git reset

最近在网上搜索git revert 和git reset 的用法对比,实际操作的时候,发现根本行不通,自己摸索了下,记录下这篇文章。 git revert:回退某次提交,并重新提交,相当于代码恢复修改前,但是服务器上有两次提交log; git reset:回退某次提交,同时回退修改log,但是修改内容回退到本地暂存区,由用户确定丢弃(checkout)或者重新提交。 假设当前有3个c

hank的专栏 9596

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

git revert vs git reset

git revert并不会删除要改回的commit的之后所有的历史commit, 而reset必须要删除目标commit之后所有的commit(也不是真正删除了,只是让之后的那些commit变成orphan commits,然后在git做垃圾回收时会被真正删除掉)。另外,git revert也并不会删除目标commit, 而是添加了一个新的commit,这个新的commit跟目标commit执行的是相反的动作,所以合到一起之后,就相当于undo了之前的目标commit.

Tom098的博客 1057

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Git Rebase vs Merge, GIt Reset vs Revert

Git merge vs Rebase 构造场景如下: https://zhuanlan.zhihu.com/p/29682134?utm_source=wechat_session Git Rest & Revert 在自己的分支上可以使用git reset, 如果是公共分支建议使用git revert,这样可以记录历史。Rest是指针的移动,revert是把回退当作一次...

shenhuxi10000的博客 523

Git 版本回退/撤销/重置:CheckOut VS Revert VS Reset

本文分析了Git中三种常用代码回退命令:CheckOut、Revert和Reset的区别与适用场景。CheckOut适用于撤销未提交的本地修改或切换分支;Revert通过创建新提交来安全撤销已推送的更改;Reset则用于重置本地提交历史,分为三种模式(--soft、--mixed、--hard)。文章详细说明了不同开发阶段(未add、已add未commit、已commit未push、已push)应选择的对应操作,并比较了Revert和Reset的核心差异:Revert保留历史适合公共仓库,Reset修改历史

Knight 1490

Git Reset vs Revert:彻底搞懂版本回滚的终极指南

在Git版本控制中,reset和revert是两个最容易混淆的命令,但它们有着本质的区别。理解这两个命令的区别对于避免项目历史混乱至关重要。😊 ## 什么是Git Reset? Git reset命令用于**重置当前分支的HEAD**到指定的提交,它会修改提交历史。根据不同的参数,reset有三种主要模式: **--soft**:只重置HEAD指针,不修改暂存区和工作区 **--mixed

gitblog_00930的博客 1006

Git Revert vs Reset

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34301307的博客 84

git revert .vs. git reset .vs. git rebase

1. git rervert的工作方式是:将一个老的commit的改动完全找出来,并且在新的tip处运行反操作,最终清除老commit的改动; git revert的应用场景多在对public repo的历史信息反悔; 2. git reset :则通过重写历史,将commit之后的所有commits都全部丢弃, 正因为这个特性,git reset往往只存在于本地的commit历史整理反悔;一旦

matiascx的博客 248

git reset vs git revert:explain-git-with-d3教你用可视化区分两种撤销操作

explain-git-with-d3是一个使用D3.js可视化Git分支操作的开源项目,旨在通过直观的图形界面帮助开发者理解Git核心概念。本文将通过该项目提供的交互式可视化工具,详细解析`git reset`和`git revert`两种撤销操作的区别,让你轻松掌握Git版本控制的关键技巧。 ## 为什么需要区分git reset和git revert? 在日常开发中,我们经常需要撤销错误

gitblog_00450的博客 916

Git reset与revert核心区别:指针移动vs逆向提交

Git reset和revert是处理错误提交的两大基础机制,本质分别对应‘修改提交指针’与‘生成反向补丁’。reset通过移动HEAD、index和working directory三重指针实现历史回退,具有不可逆性与协作风险;revert则基于diff计算生成新提交,保留原始历史,天然支持团队协同。二者的技术价值在于平衡开发效率与历史可追溯性——reset适用于本地未推送的原子修正,revert则是共享分支上安全回滚的黄金标准。本文深入解析其底层原理、作用域边界及CI/CD、VS Code等真实工程环境

weixin_30423065的博客 301

Git从0到实战(四):冲突解决与版本回退 —— 别怕,出错了也能救

Git 发现两个人同时改了同一个文件的同一行,它不知道该用谁的版本,所以停下来,让你来决定。,而是创建一个新的 commit,这个新 commit 的内容是"撤销某个旧 commit 的修改"。,D 的内容就是"B 的反操作"——B 添加的代码 D 删除,B 删除的代码 D 恢复。:你想撤销 commit 和 add,所有修改回到工作区,让你重新选择要提交哪些文件。:你想撤销最近一次 commit,但保留所有修改,想重新修改后再提交。时,Git 不知道该怎么处理这两个不同的改动——冲突就发生了。

m0_63299656的博客 320

Vscode中的源代码管理如何使用

VS Code中使用Git进行源代码管理的简明指南 本文介绍了如何在VS Code中使用Git进行源代码管理。主要内容包括: 准备工作:安装Git并初始化仓库 基本工作流程:修改文件→暂存更改→提交更改→同步到远程仓库 分支管理:创建新分支、切换分支、在不同分支上工作 使用Git Graph插件可视化操作 重点说明了Git的核心逻辑:先在本地建立版本快照,再选择性上传到GitHub。通过VS Code的可视化界面,用户可以轻松完成Git操作,无需记忆复杂命令。特别适合需要版本控制和团队协作的开发场景。

weixin_65259109的博客 2162
上一篇: Git如何怎样将N次提交压缩成一次提交
下一篇: 详细分析git reset
太阳与星辰
博客等级 码龄8年 2379粉丝 372原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

太阳与星辰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值