百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT技术 > 正文

想成为Git大神?从学会reset开始吧

wptr33 2025-05-26 19:23 18 浏览

大家好,今天我们来着重介绍一个非常关键的功能就是reset。在上一篇文章介绍修改历史记录的时候曾经提到过,当我们需要拆分一个历史提交记录的时候需要使用reset。估计很多小伙伴不明白,reset究竟做了什么,所以在这篇文章当中我们来详细聊聊。

git reset功能整体的操作分为三个步骤,我们拆分开来详细介绍。

第一步(移动指针)

虽然reset有三个步骤,但是我们通过加入不同的参数,可以实现在不同的步骤退出。但是不管怎么操作,第一步都是一定会执行的。

reset的第一步就是移动HEAD指针,HEAD指针我们都知道就是当前的工作目录的指针。说到移动指针,我们可能会想起checkout,checkout的功能就是移动指针。我们不仅可以移动到另外的分支,也可以移动到之前某一次的提交记录。

这是我们这个git专题的目录,如果我们执行git checkout bee9ce,那么我们的工作目录会被重置到这个提交之后的状态。而最新的add article 17这个commit的所有改动都会不可见,就好像发生了时间倒流一样,我们回到了刚刚commit完add new articles的状态。

reset虽然也一样是移动HEAD指针,但是它对于移动之后的处理不同。reset之后我们的commit不是不可见而是被回滚了。

我们来做个实验,现在我们在目录当中创建一个test.txt文件,我们把它commit。

然后我们执行git reset --soft HEAD~。

这里的HEAD~我们应该都了解了,HEAD表示当前位置,~表示前一个位置。所以连起来就是表示reset到HEAD之前的一个提交。soft参数表示我们reset的时候只执行第一个步骤,也就是移动指针的步骤。

reset之后我们发现test.txt这个文件并没有消失,仍然还在暂存区当中,只不过还没有被commit。这就是reset回滚commit的操作,它不会把改动抹除,但是会把commit取消。

第二步(更新暂存区)

如果我们在reset的时候加上了--soft的参数,它会在执行第一步结束之后就退出,后面的第二步和第三步都不会执行。

如果想要执行第二步,我们可以不传任何参数,或者是指定--mixed。因为reset的默认参数就是--mixed。

第二个步骤是更新暂存区,前面我们看见了,如果只是移动指针,那么在移动的时候会把中间的commit全部取消。虽然这些提交被取消了,但是它们对应的改动仍然存在,并且一样存放在暂存区当中,相当于执行完git add之后的状态。

如果我们继续执行第二步,git会把暂存区也给重置,回到git add之前的状态

如上图所示,我们执行了git reset HEAD~之后再执行git status可以看到test.txt回到了被add之前的状态。

第三步(回滚修改)

reset的最后一步是回滚修改,也就是在第二步的基础上,进一步把改动全部抹除,回滚到没有修改之前的状态。如果需要实现这一点,需要加上--hard参数。

这是一个非常危险的操作,它不仅会回滚已经被commit的所有改动,并且还会强制覆盖当前工作区,所有没有被提交的改动也一样会消失。只要是提交了的改动,即使reset了,也可以通过reflog找回来,但是如果没有提交的就没有办法了,所有的改动都会消失。对于开发者来说,这是一个巨大的打击,一定要切记慎重。

最后我们简单总结一下reset的用法。

git reset --soft,只会回滚commit操作,所有的改动都会保留在暂存区。相当于回到了执行git commit之前。

git reset --mixed,不仅会回滚commit操作,也会回滚暂存区内的内容。相当于回到了执行git add之前。

git reset --hard,会回滚一切,重置工作区。相当于回到了改动之前,没有被commit的内容会丢失

reset是一个很好用的功能,使用熟练可以起到非常大的作用,实现一些炫酷的功能。但是它也有很大的隐患,如果一不小心使用了--hard可能会导致一些悲剧发生。我就有过几次不小心把刚写完的代码回滚了的经历,所以大家在使用的时候一定要千万小心。

今天的文章就到这里,衷心祝愿大家每天都有所收获。如果还喜欢今天的内容的话,请来一个三连支持吧~(点赞、关注、转发

本文始发于公众号:TechFlow,求个关注

相关推荐

Python自动化脚本应用与示例(python办公自动化脚本)

Python是编写自动化脚本的绝佳选择,因其语法简洁、库丰富且跨平台兼容性强。以下是Python自动化脚本的常见应用场景及示例,帮助你快速上手:一、常见自动化场景文件与目录操作...

Python文件操作常用库高级应用教程

本文是在前面《Python文件操作常用库使用教程》的基础上,进一步学习Python文件操作库的高级应用。一、高级文件系统监控1.1watchdog库-实时文件系统监控安装与基本使用:...

Python办公自动化系列篇之六:文件系统与操作系统任务

作为高效办公自动化领域的主流编程语言,Python凭借其优雅的语法结构、完善的技术生态及成熟的第三方工具库集合,已成为企业数字化转型过程中提升运营效率的理想选择。该语言在结构化数据处理、自动化文档生成...

14《Python 办公自动化教程》os 模块操作文件与文件夹

在日常工作中,我们经常会和文件、文件夹打交道,比如将服务器上指定目录下文件进行归档,或将爬虫爬取的数据根据时间创建对应的文件夹/文件,如果这些还依靠手动来进行操作,无疑是费时费力的,这时候Pyt...

python中os模块详解(python os.path模块)

os模块是Python标准库中的一个模块,它提供了与操作系统交互的方法。使用os模块可以方便地执行许多常见的系统任务,如文件和目录操作、进程管理、环境变量管理等。下面是os模块中一些常用的函数和方法:...

21-Python-文件操作(python文件的操作步骤)

在Python中,文件操作是非常重要的一部分,它允许我们读取、写入和修改文件。下面将详细讲解Python文件操作的各个方面,并给出相应的示例。1-打开文件...

轻松玩转Python文件操作:移动、删除

哈喽,大家好,我是木头左!Python文件操作基础在处理计算机文件时,经常需要执行如移动和删除等基本操作。Python提供了一些内置的库来帮助完成这些任务,其中最常用的就是os模块和shutil模块。...

Python 初学者练习:删除文件和文件夹

在本教程中,你将学习如何在Python中删除文件和文件夹。使用os.remove()函数删除文件...

引人遐想,用 Python 获取你想要的“某个人”摄像头照片

仅用来学习,希望给你们有提供到学习上的作用。1.安装库需要安装python3.5以上版本,在官网下载即可。然后安装库opencv-python,安装方式为打开终端输入命令行。...

Python如何使用临时文件和目录(python目录下文件)

在某些项目中,有时候会有大量的临时数据,比如各种日志,这时候我们要做数据分析,并把最后的结果储存起来,这些大量的临时数据如果常驻内存,将消耗大量内存资源,我们可以使用临时文件,存储这些临时数据。使用标...

Linux 下海量文件删除方法效率对比,最慢的竟然是 rm

Linux下海量文件删除方法效率对比,本次参赛选手一共6位,分别是:rm、find、findwithdelete、rsync、Python、Perl.首先建立50万个文件$testfor...

Python 开发工程师必会的 5 个系统命令操作库

当我们需要编写自动化脚本、部署工具、监控程序时,熟练操作系统命令几乎是必备技能。今天就来聊聊我在实际项目中高频使用的5个系统命令操作库,这些可都是能让你效率翻倍的"瑞士军刀"。一...

Python常用文件操作库使用详解(python文件操作选项)

Python生态系统提供了丰富的文件操作库,可以处理各种复杂的文件操作需求。本教程将介绍Python中最常用的文件操作库及其实际应用。一、标准库核心模块1.1os模块-操作系统接口主要功能...

11. 文件与IO操作(文件io和网络io)

本章深入探讨Go语言文件处理与IO操作的核心技术,结合高性能实践与安全规范,提供企业级解决方案。11.1文件读写11.1.1基础操作...

Python os模块的20个应用实例(python中 import os模块用法)

在Python中,...