2020-12-29

博客园Logo
首页
新闻
博问
专区
闪存
班级

代码改变世界
搜索
注册
登录
返回主页
TechFlow2019
博客园 首页 新随笔 联系 订阅 管理随笔 - 307 文章 - 0 评论 - 189
想成为Git大神?从学会reset开始吧
大家好,今天我们来着重介绍一个非常关键的功能就是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可能会导致一些悲剧发生。我就有过几次不小心把刚写完的代码回滚了的经历,所以大家在使用的时候一定要千万小心。

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

标签: git入门, git教程, git
好文要顶 关注我 收藏该文
TechFlow2019
关注 - 0
粉丝 - 197
+加关注
0 0
« 上一篇: Git提交错了不用慌,这三招帮你修改记录
posted @ 2020-12-29 12:13 TechFlow2019 阅读(44) 评论(0) 编辑 收藏
刷新评论刷新页面返回顶部
登录后才能发表评论,立即 登录 或 注册, 访问 网站首页
写给园友们的一封求助信
【推荐】News: 大型组态、工控、仿真、CADGIS 50万行VC++源码免费下载
【推荐】有你助力,更好为你——博客园用户消费观调查,附带小惊喜!
【推荐】博客园x丝芙兰-圣诞特别活动:圣诞选礼,美力送递
【推荐】了不起的开发者,挡不住的华为,园子里的品牌专区
【福利】AWS携手博客园为开发者送免费套餐+50元京东E卡
【推荐】未知数的距离,毫秒间的传递,声网与你实时互动
【推荐】新一代 NoSQL 数据库,Aerospike专区新鲜入驻

相关博文:
· gitreset
· gitcommit之后,想撤销commit
· gitmerge后,想恢复之前版本步骤
· 想要学好Git,应该掌握哪些基础知识?
· 函数参数-arguments-reset参数-参数数量
» 更多推荐…

最新 IT 新闻:
· 「逃离硅谷」愈演愈烈,旧金山正在消亡?
· 虽品质过硬 但《使命召唤手游》成不了《和平精英》
· 小米11上手体验:下了狠手,也留了一手
· 连摘两项大奖 腾讯云IPv6产品实力和领先部署能力再获权威机构认可
· 郭德帆:2021年对科技公司的一些预判
» 更多新闻…
历史上的今天:
2019-12-29 LeetCode 1 Two Sum——在数组上遍历出花样
公告

日拱一卒,功不唐捐
欢迎关注我的公众号:TechFlow

昵称: TechFlow2019
园龄: 1年
粉丝: 197
关注: 0
+加关注
< 2020年12月 >
日 一 二 三 四 五 六
29 30 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 1 2
3 4 5 6 7 8 9
搜索

找找看

谷歌搜索
常用链接

我的随笔
我的评论
我的参与
最新评论
我的标签
我的标签

算法(96)
LeetCode(58)
机器学习基础(53)
python(45)
数据结构(39)
Python基础(20)
git(16)
go语言(14)
高等数学(14)
git教程(13)
更多
随笔分类

Go(15)
LeetCode题解(53)
Python(37)
spark(6)
大数据与分布式(10)
机器学习(45)
其他(2)
数学基础(16)
算法与数据结构(48)
随笔档案

2020年12月(15)
2020年11月(18)
2020年10月(22)
2020年9月(21)
2020年8月(22)
2020年7月(22)
2020年6月(29)
2020年5月(31)
2020年4月(36)
2020年3月(32)
2020年2月(28)
2020年1月(23)
2019年12月(8)
最新评论

  1. Re:Git提交错了不用慌,这三招帮你修改记录
    很倔,越是要支持、转发的,偏不去,还要反对一下~
    –萝卜小兔子头

  2. Re:大数据算法——布隆过滤器
    @忆回首泪倾城 DFGG…
    –Jack勤劳的打工人

  3. Re:裸考了一次雅思,我居然学会了数据分析!
    @Grey Zeng 6.0…
    –TechFlow2019

  4. Re:裸考了一次雅思,我居然学会了数据分析!
    楼主最后考了多少分?
    –Grey Zeng

  5. Re:职场中究竟什么是ownership,你是一个有ownership的人吗?
    新人可以冲一冲,因为不需要评估风险,搞不下去有资本换
    –GearTools
    阅读排行榜

  6. 大数据算法——布隆过滤器(11124)

  7. 在vscode中配置LeetCode插件,从此愉快地刷题(7098)

  8. 概率统计——三扇门游戏与贝叶斯定理(3875)

  9. 一半人写不出冒泡排序,你的同龄人都躺下了(3715)

  10. MySQL不香吗,为什么还要有noSQL?(3484)
    评论排行榜

  11. 一半人写不出冒泡排序,你的同龄人都躺下了(31)

  12. 大数据算法——布隆过滤器(29)

  13. MySQL不香吗,为什么还要有noSQL?(14)

  14. 随机数大家都会用,但是你知道生成随机数的算法吗?(9)

  15. 职场中究竟什么是ownership,你是一个有ownership的人吗?(6)
    推荐排行榜

  16. 大数据算法——布隆过滤器(45)

  17. MySQL不香吗,为什么还要有noSQL?(20)

  18. 一半人写不出冒泡排序,你的同龄人都躺下了(17)

  19. 从头搭建一个“微博”有多难(14)

  20. 对于技术岗位而言,开发岗累还是算法岗累呢?(9)
    Copyright © 2020 TechFlow2019
    Powered by .NET 5.0 on Kubernetes

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值