Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >git reset 三种模式

git reset 三种模式

作者头像
小小杨
发布于 2021-10-13 02:33:40
发布于 2021-10-13 02:33:40
7.2K00
代码可运行
举报
文章被收录于专栏:下落木下落木
运行总次数:0
代码可运行

git reset --hard指的是恢复某一个库。

git reset --hard HEAD^是向前回退版本,其中HEAD后面跟几个^就是往回退几个版本,如果回退100个版本,可以写成 HEAD~100 。

git reset有三种模式,soft,mixed,hard,具体的使用方法下面这张图,展示的很全面了。

1. git reset 语法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
命令格式:git reset [--soft | --mixed | --hard] [<commit>]
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

1.1 使用参数--hard,如git reset --hard <commit ID>

①替换引用的指向。引用指向新的提交ID。

②替换暂存区。替换后,暂存区的内容和引用指向的目录树一致。

③替换工作区。替换后,工作区的内容变得和暂存区一致,也和HEAD所指向的目录树内容相同。

1.2 使用参数--soft,如 git reset --soft <commit ID>

即只更改引用的指向,不改变暂存区和工作区。

只改变commit(指针指向),stage index 和 working directory 不变

1.3 使用参数--mixed或者不使用参数(默认为--mixed),如 git reset <commit>

更改引用的指向及重置暂存区,但是不改变工作区。

只改变commit(指针指向) 和 add (stage index),working directory不变

2. git reset 原理

--hard:重置位置的同时,直接将 working Tree工作目录、 index 暂存区及repository 都重置成目标Reset节点的内容,所以效果看起来等同于清空暂存区和工作区。

--soft:重置位置的同时,保留working Tree工作目录和index暂存区的内容,只让repository中的内容和 reset 目标节点保持一致,因此原节点和reset节点之间的【差异变更集】会放入index暂存区中(Staged files)。

所以效果看起来就是工作目录的内容不变,暂存区原有的内容也不变,只是原节点和Reset节点之间的所有差异都会放到暂存区中。

--mixed(默认):重置位置的同时,只保留Working Tree工作目录的内容,但会将 Index暂存区 和 Repository 中的内容更改和reset目标节点一致。

因此原节点和Reset节点之间的【差异变更集】会放入Working Tree工作目录中。所以效果看起来就是原节点和Reset节点之间的所有差异都会放到工作目录中。

3. 总结

reset 的本质:移动 HEAD 以及它所指向的 branch

实质上,reset 这个指令虽然可以用来撤销 commit ,但它的实质行为并不是撤销,而是移动 HEAD ,并且「捎带」上 HEAD 所指向的 branch(如果有的话)。

也就是说,reset 这个指令的行为其实和它的字面意思 "reset"(重置)十分相符:它是用来重置 HEAD 以及它所指向的 branch 的位置的。

而 reset --hard HEAD^ 之所以起到了撤销 commit 的效果,是因为它把 HEAD 和它所指向的 branch 一起移动到了当前 commit 的父 commit 上,从而起到了「撤销」的效果:

Git 的历史只能往回看,不能向未来看,所以把 HEAD 和 branch 往回移动,就能起到撤回 commit 的效果。

所以同理,reset --hard 不仅可以撤销提交,还可以用来把 HEAD 和 branch 移动到其他的任何地方。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
git reset --hard branch2
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 下落木 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
初识git · 基本操作
Git 是一个开源的分布式版本控制系统,最初由林纳斯·托瓦兹(Linus Torvalds)于2005年开发,目的是为了更好地管理Linux内核的开发过程。与传统的集中式版本控制系统(如SVN)不同,Git允许开发者在本地进行完整的版本控制操作,包括提交、分支和合并,而无需依赖网络连接到中央服务器。
_lazy
2024/10/16
910
初识git · 基本操作
【Git】初识Git && Git基本操作详解
​ 另外还要明白,我们 平时使用的 gitee、github 等平台,其实只是基于 git 的托管平台,相当于远程仓库,要分清楚!
利刃大大
2025/02/02
1860
【Git】初识Git && Git基本操作详解
轻松掌握Git开发(三)版本的切换
前面我们进行了两次提交,通过该指令就都显示出来了,包括提交的作者标识,提交时间,提交描述等。仔细观察,会发现这两次提交的信息展示不太一样:
ZackSock
2020/10/29
5130
轻松掌握Git开发(三)版本的切换
【Git#1】初识 git(配置 & 基本认识 & 文件操作)
在工作或学习时经常遇到这样的情况:我们在编写各种文档时,为了防止文档丢失,更改失误,失误后能恢复到原来的版本,不得不复制出一个副本,比如:
IsLand1314
2025/04/19
1930
【Git#1】初识 git(配置 & 基本认识 & 文件操作)
Git Reset命令
Git分为三个区: 工作区(Working Directory):没有修改、修改后未使用git add的文件 暂存区(Staged):新增/修改后的文件调用git add后都会被添加到暂存区 提交区(Commit):所有添加到暂存区里的文件通过git commit之后会被统一添加到提交区,作为一次提交
None_Ling
2018/10/24
4.6K0
Git - reset, checkout, revert 总结
将会查出倒数第二次(即当前commit的往前一次)提交的修改,并创建一个新的提交,用于撤销当前提交的上一次 commit。
为为为什么
2022/08/05
5560
【Git】5 个分区的切换方式及示例
假设你正在开发一个网站项目 my_project,你要修改 index.html 文件,并将代码提交到远程仓库。
LuckiBit
2025/04/03
1320
Git的基础操作
其中--global 是⼀个可选项。如果使用了该选项,表示这台机器上所有的Git仓库都会使用这个 配置。如果你希望在不同仓库中使用不同的name或 e-mail ,可以不要--global 选项,但要 注意的是,执行命令时必须要在仓库里。
二肥是只大懒蓝猫
2024/07/19
930
Git的基础操作
head/reset/revert/rebase代码回滚全解:git提交记录的背后原理
多人合作程序开发的过程中,我们有时会出现错误提交的情况,此时我们希望能撤销提交操作,让程序回到提交前的样子,操作有:
周陆军博客
2023/04/09
2.9K0
git reset 回退版本(版本穿梭)
如果创建了一个新的文件,这个文件是未跟踪的状态,那么使用 reset 回退版本时,这个新文件不会受到影响
很酷的站长
2023/01/02
1.2K0
git reset 回退版本(版本穿梭)
Git笔记
配置级别:--local 项目级、--global 当前用户级、--system 系统级
_春华秋实
2019/05/25
4540
Git撤销&回滚操作(git reset 和 get revert)
俗话说,老虎也有打盹的时候。我们提交代码,也会有出错的时候。 我今天不小心把不该提交的文件给提交了。
赵云龙龙
2020/02/13
38.4K0
Git撤销&回滚操作(git reset 和 get revert)
git初入门(二):文件操作
如果我们提交过后发现有个文件改错了,或者只是想修改提交说明,这时可以对相应文件做出修改,将修改过的文件通过 "git add" 添加到暂存区,然后执行以下命令:
传说之下的花儿
2023/09/16
4120
git初入门(二):文件操作
Git基本操作(超详细)
.git ⽬录是Git来跟踪管理仓库的,不要⼿动修改这个⽬录⾥⾯的⽂件,不然改乱了,就把Git仓库给破坏了
南桥
2024/02/20
1.2K0
Git基本操作(超详细)
轻松掌握Git开发(三)版本的切换
前面我们进行了两次提交,通过该指令就都显示出来了,包括提交的作者标识,提交时间,提交描述等。仔细观察,会发现这两次提交的信息展示不太一样:
wangweijun
2020/10/21
6380
Git使用教程(看完会了也懂了)
默认打开的地址是应该是用户目录,也就是c盘Users下某个地方,下面就先在固定的地址新建一个空的目录作为我们的新项目,叫做FastApiProject:
MinChess
2023/08/13
1.5K0
Git使用教程(看完会了也懂了)
Git那些事系列:从业务场景到高级技巧的完整指南(三)
在一个岁月静好的一天,笔者使用一个开发分支在测试环境做编包和部署,发布的时候突然报错,查看原因是某个配置文件异常,一些部署相关代码被删除了!
粲然忧生
2023/10/08
4630
【git系列】git命令之撤销回退篇
适用场景:开发过程,需求逻辑尚未实现,突然要切换版本解决问题,但是本次修改的代码并不想提交本地仓库,使用statsh命令暂存修改。
沁溪源
2020/12/07
1.8K0
Git那些事系列:从业务场景到高级技巧的完整指南(三)
在一个岁月静好的一天,笔者使用一个开发分支在测试环境做编包和部署,发布的时候突然报错,查看原因是某个配置文件异常,一些部署相关代码被删除了! 当然,这件事情看起来很离谱 但在多人频繁开发的项目团队 也很正常!
粲然忧生
2023/10/12
1890
Git那些事系列:从业务场景到高级技巧的完整指南(三)
2021-1-7-一文掌握git/github使用,内容详细,适合小白~
本文先结合版本控制系统对git进行了简要介绍,再详细讲述了github注册使用教程和git安装使用教程,希望对和楼主一样的小白有所帮助。
用户7719114
2022/02/22
5290
2021-1-7-一文掌握git/github使用,内容详细,适合小白~
相关推荐
初识git · 基本操作
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验