git reset 的三种模式的使用场景
一、前提
参考:建议先阅读:Git Reset 三种模式
这篇文章只是我的的一个笔记
二、三种模式
- git reset --soft
- git reset --mixed
- git reset --hard
这三个模式理解了,对于使用这个命令很有帮助。在理解这三个模式之前,需要略微知道一点Git的基本流程。正如上图,Git会有三个区域:
- Working Tree 当前的工作区域
- Index/Stage 暂存区域,和git stash命令暂存的地方不一样。使用git add xx,就可以将xx添加近Stage里面
- Repository 提交的历史,即使用git commit提交后的结果
三、reset三种模式区别和使用场景
1.--soft
--soft
重置位置的同时,保留working Tree工作目录和index暂存区的内容,只让repository中的内容和 reset 目标节点保持一致,因此原节点和reset节点之间的【差异变更集】会放入index暂存区中(Staged files)。所以效果看起来就是工作目录的内容不变,暂存区原有的内容也不变,只是原节点和Reset节点之间的所有差异都会放到暂存区中。
场景1:当你连续commit
多个版本时,觉得这几个commit
提交不具有太大意义,可以通过git reset --soft 版本号
将这些commit
合并为一个commit
进行提交。
步骤:
git reset --soft
回退版本git commit
提交到本地仓库git push
提交到远程仓库a)这里准备了几个历史commit提交进行测试
b)回退版本,通过
git reset --soft 版本号
回退,然后强制进行提交$ git log -3 #查看历史提交记录 commit 09727f64ca0d422e5aa90e1838f8b1249fea1a9a (HEAD -> master, origin/master, origin/HEAD) Date: Wed Jul 7 20:10:20 2021 +0800提交4commit 5193b8066585f387d391b5dd900e5a305be79dbb Date: Wed Jul 7 20:09:01 2021 +0800提交3commit 63b99f3c46f8259a28bce0d860d3e66a626f744e Author: sunchao <15292080775@163.com>Date: Wed Jul 7 20:08:48 2021 +0800提交2 $ git reset --soft 63b99f3c46f8259a28bce0d860d3e66a626f744e #回退到历史版本2$ git commit -m "提交4" #添加到本地仓库$ git push --force #强制提交
此时再来看版本信息,提交2已经被覆盖了
场景2:当我们commit
一个提交,但是这个提交并没有被push
,我们不需要这个commit
,可以通过git reset --soft
清除这个没有push
的commit
a)这里提交commit
了一个未push
的提交
![image-20210707203528618](https://img-blog.csdnimg.cn/img_convert/a020eaedffcbee5a48e7d7354f8db153.png)
b)通过git reset --soft 版本号进行回退
$ git log -2
commit f540f2be7c765da3b88e8a0a385d0d4ce9650583 (HEAD -> master)
Date: Wed Jul 7 20:35:16 2021 +0800提交5commit 0a8f7ec9d568e16766aef5e35e6513f92aa76306 (origin/master, origin/HEAD)
Date: Wed Jul 7 20:27:44 2021 +0800提交4$ git reset --soft 0a8f7ec9d568e16766aef5e35e6513f92aa76306 #回退到提交4
可以发现,这个没有push
的commit
已经不存在了
2.--mixed
--mixed
重置位置的同时,只保留Working Tree工作目录的內容,但会将 Index暂存区 和 Repository 中的內容更改和reset目标节点一致,因此原节点和Reset节点之间的【差异变更集】会放入Working Tree工作目录中。所以效果看起来就是原节点和Reset节点之间的所有差异都会放到工作目录中。
场景:场景:当你连续commit
多个版本时,觉得这几个commit
没有意义可以合并时,通过git reset --mixed版本号
进行回退,与--soft
模式相比,在commit
到本地仓库之前需要git add
操作将变动的内容添加到暂存区。
步骤:
git reset
回退版本git add .
将变动的内容添加到暂存区git commit
提交到本地仓库git push
提交到远程仓库a)测试日志记录如下
b)通过
git reset --soft 版本号
进行回退$ git log -3 #查看历史记录 commit e5b2ba1742b1c0223ff21c13603a7d1b6bec6ff0 (HEAD -> master, origin/master, origin/HEAD) Date: Wed Jul 7 20:44:05 2021 +0800提交5commit 0a8f7ec9d568e16766aef5e35e6513f92aa76306 Date: Wed Jul 7 20:27:44 2021 +0800提交4commit 63b99f3c46f8259a28bce0d860d3e66a626f744e Date: Wed Jul 7 20:08:48 2021 +0800提交2$ git reset 63b99f3c46f8259a28bce0d860d3e66a626f744e #回退到提交2 Unstaged changes after reset: M README.md$ git add . #将修改内容添加到暂存区 $ git commit -m "测试提交5" #提交到本地仓库 [master dc8407a] 测试提交51 file changed, 1 insertion(+), 1 deletion(-)$ git push --force #强制提交
3.--hard
--hard
:重置位置的同时,直接将 working Tree工作目录、 index 暂存区及 repository 都重置成目标Reset节点的內容,所以效果看起来等同于清空暂存区和工作区。
场景:要放弃目前本地的所有改变時,即去掉所有add到暂存区的文件和工作区的文件,可以执行 git reset -hard HEAD 来强制恢复git管理的文件夹的內容及状态;真的想抛弃目标节点后的所有commit(可能觉得目标节点到原节点之间的commit提交都是错了,之前所有的commit有问题)
步骤:
git reset --hard
回退版本git commit
提交到本地仓库git push
提交到远程仓库a)测试日志
b)
git reset -hard 版本号
进行回退$ git log -3 commit 167c5f9b9d60e270e7850004fd0dd7f9fe5131d3 (HEAD -> master, origin/master, origin/HEAD) Date: Wed Jul 7 20:56:03 2021 +0800提交6commit dc8407a1f9a68cdc2f66b53299d8030ee62bfdba Date: Wed Jul 7 20:49:35 2021 +0800测试提交5commit 63b99f3c46f8259a28bce0d860d3e66a626f744 Date: Wed Jul 7 20:08:48 2021 +0800提交2$ git reset --hard dc8407a1f9a68cdc2f66b53299d8030ee62bfdba HEAD is now at dc8407a 测试提交5
c)查看差异
以ba
结尾的版本就是我们回退的版本,说明工作目录已经回退
d) 此时我们可以修改以后再次提交
git reset 的三种模式的使用场景相关推荐
- Git之Reset的三种模式
前言 使用场景:当commit的内容有错误,需要回撤到之前的某个版本时. git reset一句话概括: git-reset - Reset current HEAD to the specified ...
- a commit git 参数是什么意思_Git中的git reset的三种参数的区别
我们平时在使用git的时候,经常会遇到需要撤销上次操作的需求,这时候需要用到git reset的这个命令,他的使用就是 "git-reset – Reset current HEAD to ...
- .net core 注入中的三种模式:Singleton、Scoped 和 Transient
从上篇内容不如题的文章<.net core 并发下的线程安全问题>扩展认识.net core注入中的三种模式:Singleton.Scoped 和 Transient 我们都知道在 Sta ...
- git reset三种模式区别和使用场景(hard,soft,mixed)
简单的理解三种模式: hard reset之后,以仓库为准,仓库,暂存区和工作区保持一致,不一致的全部清除: soft reset之后,工作区内容不变,只更新仓库内容,差异保留在index暂存区: m ...
- mysql binlog 权限_MySQL如何开启binlog?binlog三种模式的分析
前提,创建表t,并插入数据,语句如下: CREATE TABLE `t` ( `id` int(11) NOT NULL, `a` int(11) DEFAULT NULL, `t_modified` ...
- 分布式事务讲解 - TX-LCN分布式事务框架(含LCN、TCC、TXC三种模式)
分布式事务讲解 - TX-LCN分布式事务框架(含LCN.TCC.TXC三种模式) 分布式事务系列博客: TX-LCN框架原理 LCN 原理及主要特点 代码实现 实现场景 创建数据库及表(三个数据库, ...
- Oracle 11g dataguard三种模式以及实时查询(Real-time query)功能设置
之前我们讨论过<Linux Oracle 11g dataguard物理standby 配置过程>, 但是在实际过程中会遇到不同的问题,首先我们讨论下ORACLE DATAGUARD的三种 ...
- SAP EWM 与 AGV 机器人对接的三种模式
SAP EWM 与 AGV 机器人对接的三种模式 https://mp.weixin.qq.com/s/xGfUMSBTEMYKce5oXcWDqA 导读 本文转载自:弘毅供应链,跟随供应链专家 ...
- Tomcat三种模式及配置APR模式
为什么80%的码农都做不了架构师?>>> Tomcat三种模式 Tomcat Connector的三种不同的运行模式性能相差很大,有人测试过的结果如下: 这三种模式的不同之处如 ...
最新文章
- [device]/proc/devices and /dev/
- 历史性难题——如何为Kafka挑选合适的分区数?
- CentOS6.3 Samba安装配置、多用户、加域
- C语言经典例21-猴子吃桃问题
- [转]redis 5.0.5 5分钟搭建redis集群
- 查看linux系统版本信息(Oracle Linux、Centos Linux、Redhat Linux、Debian、Ubuntu)
- (王道408考研操作系统)第三章内存管理-第一节6-1:非连续分配管理方式之基本分页存储管理
- 电路理论与linkage Mapper的安装
- 02024_自定义异常的练习
- Java实训项目11:GUI学生信息管理系统 - 实现步骤 - 创建服务接口
- video4linux(v4l)使用摄像头的实例基础教程与体会
- mybatis-plus 会自动增加 order by_自动化常见问题:SCL、变压器、欧姆龙软件、机器人控制分享...
- java byte binary_java byte 与 binary 转换
- 机器学习问题的十个实例
- 【回归预测】基于matlab麻雀算法优化相关向量机RVM回归预测【含Matlab源码 1750期】
- 安装SVN及安装语言包
- 【码学堂】教师如何在码学堂上组织教学活动?
- macOS 10.15 Catalina 获取App Store下载的安装包
- linux QT 结束当前进程_Qt与Web混合开发(一)--简单使用
- 请说一下你是如何理解互联网思维的?
热门文章
- 【Unity Editor工具制作-文本转UTF-8编码、用WPS表格打开表格、用WPS表格打开】
- 大律法(OTSU) ——图像数据二值化
- 【Python】EasyDict:Make Dictionary Easier
- 用AI赋能客服,灵声科技获数千万元A轮融资
- 阿里云服务器centos系统部署httpd服务器(新手向网页搭建教程)
- Python 探索 Tello 无人机的奇妙世界
- 在docker中使用U盘
- mysql截取前几个字符串_MySql中截取字符串中的某几个字符
- 理解C语言编译流程(附编译命令)
- Safari浏览器自动刷新页面插件Auto Refresh