Git进阶命令-reset

news2024/9/24 21:22:38

一、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快速开发平台_低代码开发平台_零代码开发平台_流程设计器_表单引擎_工作流引擎_软件架构

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Cinema 4D 2024 for mac/Win:开启三维动画与建模新纪元

在数字化时代,三维动画与建模已成为影视、游戏、广告等多个领域不可或缺的创作工具。而Cinema 4D,作为这一领域的佼佼者,始终以其卓越的性能和创新的功能引领着行业的发展。如今,Cinema 4D 2024的发布,更是为我们带来了…

浅谈RPC的理解

浅谈RPC的理解 前言RPC体系Dubbo架构最后 前言 本文中部分知识涉及Dubbo,需要对Dubbo有一定的理解,且对源码有一定了解 如果不了解,可以参考学习我之前的文章: 浅谈Spring整合Dubbo源码(Service和Reference注解部分&am…

【极简无废话】open3d可视化torch、numpy点云

建议直接看文档,很多都代码老了,注意把代码版本调整到你使用的open3d的版本: https://www.open3d.org/docs/release/tutorial/visualization/visualization.html 请注意open3d应该已经不支持centos了! 从其他格式转换成open3d…

桌面日程安排软件,笔记本电脑常用软件有哪些?

在如今快节奏的社会环境中,时间仿佛成了比金子还要珍贵的资源。我们每个人都像是一名指挥官,需调度好每一刻光阴,使其发挥最大效益。而在这场与时间的较量中,一款优秀的桌面日程安排软件就像您的私人助理,帮您精准规划…

[BT]BUUCTF刷题第3天(3.21)

第3天(共3题) Web [极客大挑战 2019]LoveSQL Payload:/check.php?username1 union select 1,(select group_concat(password) from l0ve1ysq1),3%23&password1 看到登录页面,先尝试万能密码: 用户名&#xff…

51单片机学习9 串口通讯

51单片机学习9 串口通讯 一、串口通讯简介UARTSTC89C51RC/RD的串口资源 二、51单片机串口介绍1. 内部结构2. 寄存器(1)串口控制寄存器SCON(2)电源控制寄存器PCON 3. 计算波特率4. 串口配置步骤 三、 开发示例1. 硬件电路2. 代码实…

Jenkins流水线将制品发布到Nexus存储库

1、安装jenkins(建议别用docker安装,坑太多) docker run -d -p 8089:8080 -p 10241:50000 -v /var/jenkins_workspace:/var/jenkins_home -v /etc/localtime:/etc/localtime --name my_jenkins --userroot jenkins/jenkins:2.449 坑1 打开x…

第十九章 TypeScript 装饰器Decorator

Decorator 装饰器是一项实验性特性,在未来的版本中可能会发生改变 它们不仅增加了代码的可读性,清晰地表达了意图,而且提供一种方便的手段,增加或修改类的功能 若要启用实验性的装饰器特性,你必须在命令行或tsconfig…

动手做简易版俄罗斯方块

导读:让我们了解如何处理形状的旋转、行的消除以及游戏结束条件等控制因素。 目录 准备工作 游戏设计概述 构建游戏窗口 游戏方块设计 游戏板面设计 游戏控制与逻辑 行消除和计分 判断游戏结束 界面美化和增强体验 看看游戏效果 准备工作 在开始编码之前…

Riscure TrueCode静动态代码分析工具介绍

True Code是一个安全代码开发和自动漏洞识别的解决方案,适用于软件开发生命周期(SDLC)和DevSecOps流程。 True Code使用LibFuzzer作为模糊工具来模糊目标程序或软件。 True Code - Automated embedded Software Security checks 设备上运行…

高速CAN 收发器AMIS30660CANH2RG 用于各种数据传输协议的调制解调器和收发器

AMIS30660CANH2RG CAN 收发器是控制器区域网络 (CAN) 协议控制器和物理总线之间的接口,可在 12 V 和 24 V 系统中使用。该收发器为总线提供差分发射功能,向 CAN 控制器提供差分接收功能。由于接收器输入较宽的共模电压范围和其他设计功能, 能…

C 多维数组

C 语言支持多维数组。多维数组声明的一般形式如下: type name[size1][size2]...[sizeN];例如,下面的声明创建了一个三维 5 . 10 . 4 整型数组: int threedim[5][10][4];二维数组 多维数组最简单的形式是二维数组。一个二维数组&#xff0c…

从JVM的退出机制分析Java程序的优雅关闭退出

前言 Java程序启动从main函数开始启动,是程序入口和主线程,但程序会在什么时候结束?为什么有的Java程序在启动后很快就结束了,比如HelloWorld程序,有的程序却能一直在运行,比如Tomcat启动后就一直保持进程…

揭秘物联网网关,如何工作?功能及选择网关的主要考虑因素

【前言】本篇为物联网硬件系列学习笔记,分享学习,欢迎评论区交流~ 在物联网时代,物联网网关至关重要。它充当传统通信网络和传感网络之间的桥梁。物联网网关作为M2M网关,可以实现各类感知网络之间、感知网络与通信网络之间的协议转…

粤嵌6818开发板如何理解Linux文件IO?

一、文件IO的概述 1、什么是文件? Linux下一切皆文件。普通文件、目录文件、管道文件、套接字文件、链接文件、字符设备文件、块设备文件。 2、什么是IO? input output:输入输出 3、什么是文件IO? 对文件的输入输出,把…

MySQL索引的创建与基本用法

MySQL索引 MySQL索引是一种数据结构,用于提高查询数据的效率。MySQL索引可以被看作是数据库表的“目录”。就像书籍的目录帮助我们快速找到特定章节的位置一样,数据库索引帮助数据库快速找到特定数据记录的位置。 MySQL索引的类型与创建方法 MySQL索引…

TR1 - Transformer起源与发展

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 | 接辅导、项目定制 1. Transformer的起源与发展 2017年Google在《Attention Is All You Need》中提出了Transformer结构用于序列标注,在翻译任务…

最细节操作 Linux LVM 逻辑卷管理

Linux LVM(逻辑卷管理) 周末愉快,今天带大家实战一下LVM! 一、LVM理论 LVM,即Logical Volume Manager,逻辑卷管理器,是一种硬盘的虚拟化技术,可以允许用户的硬盘资源进行灵活的调整和动态管理…

2023年五级区划省市县乡镇行政村社区边界数据

行政区划数据是重要的基础地理信息数据,根据国家统计局公布的数据,行政区划共分为五级,分别为省级、地级、县级、乡镇/街道级、村/社区级。 该套数据以2020-2023年国家基础地理信息数据中的县区划数据作为矢量基础,辅以高德行政区…

JavaSE:数据类型与变量

目录 一、前言 二、数据类型与变量 (一)字面常量 (二)数据类型 (三)变量 1.变量概念 2.语法格式 3.整型变量 3.1整型变量 3.2长整型变量 3.3短整型变量 3.4字节型变量 4.浮点型变量 4.1双精…