Git进阶命令-reset

一、reset命令使用场景

有时候我们提交了一些错误的或者不完善的代码,需要回退到之前的某个稳定的版本,面对这种情况有两种解决方法:

解决方法1:修改错误内容,再次commit一次

解决方法2:使用git reset 命令撤销这一次错误的commit

第一种方法比较直接,但会多一次commit记录,同时并不是所有场景都可以这么做。

所以建议使用第二种方法,因为错误的commit没必要保留下来。

二、reset命令

git reset 命令用于回退版本,可以指定退回某一次提交的版本。

reset 命令的原理是根据 commitId 来恢复版本。

因为每次提交都会生成一个 commitId,所以说 reset 可以帮你恢复到历史的任何一个版本。

这里的版本和提交是一个意思,一个 commitId 就是一个版本

命令格式如下:

git reset [--soft | --mixed | --hard] [HEAD]

常用命令

# 回退所有内容到上一个版本
git reset HEAD^

# 回退test.txt这个文件的版本到上一个版本
git reset HEAD^ test.txt

# 向前回退到第3个版本
git reset  HEAD~3

# 回退到某个版本51363e6
git reset 51363e6

注意:对于已经 push 的 commit,也可以使用reset命令,不过再次 push 时,由于远程分支和本地分支有差异,需要强制推送 git push -f 来覆盖被 reset 的 commit。

这里非常需要注意,因为 git push -f 是一个非常危险的命令。

如果在 git push -f 之前有其他同事 push 新代码。那么同事提交代码会丢失。

所以这里一定要注意 git push -f 之前要先 git pull 拉下是否有新提交代码。

三、reset参数有哪些?

option 参数的选项有以下几种

git reset --mixed:此为默认方式,将撤回的代码,存放到工作区。同时会保留本地未提交的内容。

git reset --soft:回退到某个版本 。将撤回的代码,存放到暂存区。同时会保留本地未提交的内容。

git reset --hard:彻底回退到某个版本,丢弃将撤回的代码,本地没有commit的修改会被全部擦掉。(慎用)

下面对这三种参数分别一一通过示例演示

四、reset --mixed

默认方式,将撤回的代码,存放到工作区。同时会保留本地未提交的内容。

在代码提交后,我发现这次提交也就是 commitId 为 7812249,提交错了,需要撤回。

同时这个时候呢,本地又新增修改了一些代码

执行命令

git reset d0eda46

注意 这里的commitId不是提交代码2的,而是提交代码1的,因为我们想的是回到是1这个版本,别搞错了

可以看出本地的代码和撤回的代码都在,且都在工作区

我们再来看下提交日志

git log --oneline

可以看到 提交代码2 的提交记录已经没有了。

五、reset --soft

soft和mixed差别并不大,无非就是一个回退到暂存区一个回退到工作区。

我们来演示下,把上面三个文件重新提交一次

$ git commit -a -m  '提交代码2'
[feature ebb89a1] 提交代码2
3 files changed, 5 insertions(+), 2 deletions(-)

然后再来执行reset命令

git reset --soft d0eda46

可以看出撤回的都返回在暂存区。

六、reset --hardt

这个命令和前面差别就非常大了,它不仅会丢弃错误commit提交的代码,而且本地没有commit的修改会被全部擦掉,关键是这种情况本地代码一旦擦掉是没有任何办法在找回来了。

同样我们把上面的代码再次提交

$ git commit -m  '提交代码3'
[feature de970f2] 提交代码3
3 files changed, 5 insertions(+), 2 deletions(-)

然后再来执行reset命令

git reset --hard d0eda46

在看本地

$ git status
On branch feature
nothing to commit, working tree clean

在工作区和暂存区已经没有任何代码了,也就是如果这个时候你本地开发的代码没有提交,那就永远也找不回来了。

那之前提交过的但又撤回的 提交代码3 的代码可以找回吗?

这个是可以的。

我们通过 git log --oneline 是找不回的。

找不到 提交代码3 的记录了。 那怎么办呢?

可以通过 git reflog 命令实现找回

执行命令

git reflog

这里能找到 commit 提交代码3 的记录。那现在要做的就是撤回到当前提交的位置。

执行命令

git reset de970f2

全部回来啦。

注意 切记!!!工作区有未提交的代码时不要用这个命令,因为工作区会回滚,你没有提交的代码就再也找不回了。

文章转载自:雨点的名字

原文链接:https://www.cnblogs.com/qdhxhz/p/18084982

体验地址:引迈 - JNPF快速开发平台_低代码开发平台_零代码开发平台_流程设计器_表单引擎_工作流引擎_软件架构

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/486240.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

网络类型及数据链路层协议

目录 一、网络的分类 二、数据链路层协议 1、MA网络以太网协议 2、P2P网络 3、HDLC ---高级数据链路控制协议 HDLC地址借用 三、PPP协议 1、PPP协议的优点 2、PPP数据帧封装结构 3、PPP会话的搭建 4、LCP建立——链路建立阶段 4.1协商阶段 4.2认证阶段 4.3 PAP---密…

Java基础【上】韩顺平(反射、类加载、final接口、抽象类、内部类)

涵盖知识点:反射、类加载、单例模式、final、抽象类、接口、内部类(局部内部类、匿名内部类、成员内部类、静态内部类) P711 反射机制原理 创建如下目录结构,在模块下创建src文件夹,文件夹要设置为Sources文件夹&…

农夫山泉财报公布在即,消费升级的瓶装水市场或将重新洗牌

农夫山泉财报公布在即,消费升级的瓶装水市场或将重新洗牌 新年伊始,2024年对于中国瓶装水行业注定是一个地动山摇的一年,随着农夫山泉董事长钟睒睒上次被媒体集体关注,农夫山泉遭遇上市以来的最大舆论风波。 3月26日农夫山泉的财…

2024 年 8 个最佳 PDF 转 JPG 转换器[免费和付费]

虽然 PDF(便携式文档文件)是一种流行的文档共享格式,但有时您可能希望将 PDF 文件转换为JPG,然后在网页或社交媒体上共享它们。 在本文中,我们将讨论适用于 Windows 10 和 11 的出色 PDF 到 JPG 转换器的所有特性。 …

精准、快速、便捷:游标尺模式在软件设计中的三大优势

​🌈 个人主页:danci_ 🔥 系列专栏:《设计模式》 💪🏻 制定明确可量化的目标,并且坚持默默的做事。 🚀 转载自:探索设计模式的魅力:精准、快速、便捷&#xf…

注册马来西亚商标常见问题

马来西亚商标法于1983年9月1日正式生效。这部商标法废除了马来亚、沙巴和沙捞越三地区各自的商标法规和申请程序,使马来西亚有了一部统一商标法。此外,马来西亚有关商标的法规包括1983年9月1日同时生效的《1983年商标法实施细则》。在马来西亚&#xff0…

matlab ICP配准高阶用法——统计每次迭代的配准误差并可视化

目录 一、概述二、代码实现三、结果展示1、原始点云2、配准结果3、配准误差本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、概述 在进行论文写作时,需要做对比实验,来分析改进算法的性能,期间用到了迭代误差分布统…

Java中的锁:实现并发控制与资源共享

JAVA中的锁 锁的概念锁机制为什么要使用锁锁的种类乐观锁/悲观锁独享锁/共享锁互斥锁/读写锁可重入锁/不可重入锁公平锁/非公平锁分段锁/自旋锁CAS/AQS synchronized概念应用场景四种使用场景效果对比synchronized的特点Lock/ReentrantLock对比 Volatile概念Java内存模型线程可…

多工作空间并存时ROS的环境变量异常问题

今天突然发现当多工作空间并存时,我的ROS的环境变量发生了比较诡异的异常,按照我之前的理解,在.bashrc文件中按顺序设定了ROS的环境变量后,ROS就会按照.bashrc中编写的环境变量来搜寻功能包,例如在.bashrc文件使用sour…

Nuclei Poc开发

1、Poc开发工具介绍 Nuclei:https://nuclei.projectdiscovery.io/ Cloud Platfrom云平台:https://cloud.projectdiscovery.io/ 2、目标站点简介 目标演示站点:http://glkb-jqe1.aqlab.cn/nacos/#/login 指纹:Nacos 已知常用漏洞…

【微服务】Eureka(服务注册,服务发现)

文章目录 1.基本介绍1.学前说明2.当前架构分析1.示意图2.问题分析 3.引出Eureka1.项目架构分析2.上图解读 2.创建单机版的Eureka1.创建 e-commerce-eureka-server-9001 子模块2.检查父子pom.xml1.子 pom.xml2.父 pom.xml 3.pom.xml 引入依赖4.application.yml 配置eureka服务5.…

【Web APIs】事件高级

目录 1.事件对象 1.1获取事件对象 1.2事件对象常用属性 2.事件流 1.1事件流的两个阶段:冒泡和捕获 1.2阻止事件流动 1.3阻止默认行为 1.4两种注册事件的区别 3.事件委托 1.事件对象 1.1获取事件对象 事件对象:也是一个对象,这个对象里…

rapidssl证书通配符证书800元

RapidSSL旗下的DV基础型通配符SSL证书可以同时保护多个域名站点,保护主域名以及主域名下的所有子域名。这款通配符SSL证书可以为网站提供数据加密服务,营造安全的上网环境,确保用户在网站上的数据安全传输。今天就随SSL盾小编了解RapidSSL旗下…

2024年HCIE考试题二

27、以下关于在网络中选择认证点位置的描述中,错误的是哪一项? A.在网络的接入层部署认证,有利于实现权限的细颗粒度管理和网络的高安全性 B.用户认证点从接入层上移到汇聚层之后,可能会导致用户的MAC认证失败 C.当用户认证点从…

DC电源模块的设计与调试技巧

BOSHIDA DC电源模块的设计与调试技巧 DC电源模块的设计与调试是电子工程师在实际项目中常常需要面对的任务。一个稳定可靠的DC电源模块对于电路的正常运行起到至关重要的作用。以下是一些设计与调试的技巧,帮助工程师们更好地完成任务。 第一,正确选择…

vue3.0 + ts + eslint报错:error Parsing error: ‘>‘ expected

eslint报错 这里加上对应的 eslint配置即可: parser: vue-eslint-parser, parserOptions: {parser: "typescript-eslint/parser",ecmaVersion: 2020,sourceType: module, }具体如下: module.exports {parser: vue-eslint-parser,parserOpti…

代码随想录阅读笔记-栈与队列【删除字符串中的所有相邻重复项】

题目 给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。 在 S 上反复执行重复项删除操作,直到无法继续删除。 在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。 示例: 输入&am…

如何成功将自己开发的APP上架到应用商店

如何成功将自己开发的APP上架到应用商店 随着移动应用市场的蓬勃发展,开发一款优秀的APP已成为许多企业和个人的首要选择。然而,成功上架并有效推广APP至关重要。本文将逐步介绍完整的上架流程,包括准备所需材料、注册开发者账户、进行APP备…

OpenLayers基础教程——使用WebGLPoints加载海量点数据

1、前言 最近遇到一个问题:如何在OpenLayers中高效加载海量的场强点?由于项目中的一些要求,不能使用聚合的方法加载。一番搜索之后发现:OpenLayers中有一个WebGLPoints类,使用该类可以轻松应对几十万的数据量&#xf…

多目标追踪实现_3.9

目标 利用sort算法完成多目标追踪 在这里主要实现了一个多目标跟踪器,管理多个卡尔曼滤波器对象,主要包括以下内容: 初始化:最大检测数,目标未被检测的最大帧数 目标跟踪结果的更新,即跟踪成功和失败的目…