git reset soft、mixed和hard的区别和用途详讲
先看看工作区、暂存区和本地版本库的关系
你的项目就在工作区,对于项目新建的文件你必须先add保存到暂存区,再commit提交到本地库;
对于修改的文件可以先add再commit,或者直接commit。
回退和前进commit版本,只是移动HEAD指针的位置,只要进行过commit,将永久保存,不会被删除,回退版本后可以通过git log(最详细)、git log --pretty=oneline(简化)、git log --oneline(上一个的简写)、git reflog(简化,但信息更多)获取到全部的commit的版本信息,再通过git reset进行前进。
soft (软),仅仅移动版本库HEAD指针,其他什么事都不做,即索引文件(暂存区)、工作区不会重置
mixed(混合)reset默认的,不指定reset类型就是它,移动版本库HEAD指针,重置暂存区,但不重置工作区。就比如说你从当前版本回退到历史版本,你工作区更改的文件和代码都是不会变成历史版本的。
hard(硬),移动版本库HEAD指针,重置暂存区和工作区。彻底回退到某个版本,本地的代码也会变为某个版本的内容,此命令慎用! 如果真要使用,建议先commit提交一份到本地库里,后悔再git reset回去
soft和mixed的区别
这个是我在同个文件进行soft和mixed回退commit版本后,执行git status查看版本状态(查看工作区、暂存区状态)的对比截图,可能使你更容易理解。
(下面用commit2原来的版本,commit1表示回退后的版本)
soft:仅仅将HEAD指针指向了commit1,暂存区和工作区还用的是commit2的。git status提示:需要提交的更改。暂存区还是commit2的,所以对于commit1来说等于是已经add到暂存区,但没commit到本地库,所以提示叫你提交。
mixed:除了将HEAD指向了commit1,还重置了暂存区。就是说除了工作区是commit2的,其他的都是commit1的。git status提示:没有添加要提交的更改,可以add再commit,或者直接commit。在文章的开头我也说明过了,因为工作区用是commit2的,所以对于commit1来说就是它自己的工作区的文件被修改了,所以可以先将工作区的代码add到暂存区再commit到本地库,也可以直接将工作区的代码commit到本地库。
对于进行commit版本的切换的话使用soft和mixed都差不多,但利用他们的差异可以实现撤回add、撤回commit、把文件删除和撤回add、找回删除的文件等一些效果。
例如:git reset --mixed HEAD可以实现撤回没commit的add。
写成HEAD~数字、HEAD^是回退commit版本,写成版本索引是跳到某个commit版本,只写HEAD是恢复到当前指针位置。由于mixed重置了暂存区,这使得暂存区的内容变成commit的内容,后面新add的内容就没了,从而达到撤回add的目的。
但如果用的是git reset --soft HEAD是没有作用的,因为它并没有重置任何区域。
而如果用的是git reset --hrad HEAD,由于它重置了暂存区和工作区,这使得暂存区和工作区的内容变成commit的内容,相当于不仅撤回了add而且还把它删除了。同理,假如我误删了一个文件,我可以去到一个还有该文件的commit里找回,执行git reset --hard [指针位置],从而达到一种找回已删除文件的效果。 注意:hrad要慎用,如果工作区还有没commit的内容,还是先commit一份再使用吧。
git reset --mixed HEAD^,可达到类似于撤回commit效果。但要知道它本质只是回退到上版本并重置了暂存区,并没有真正撤回commit,已经commit的记录是不可磨灭的。
git reset soft、mixed和hard的区别和用途详讲相关推荐
- a commit git 参数是什么意思_Git中的git reset的三种参数的区别
我们平时在使用git的时候,经常会遇到需要撤销上次操作的需求,这时候需要用到git reset的这个命令,他的使用就是 "git-reset – Reset current HEAD to ...
- git reset --soft 版本回退多了,怎么恢复?
正常可能是想git reset --soft 回退到上一版本,不小心回退到了历史的某个版本,本地出现了一堆未提交的文件,想恢复到最新版本,怎么搞? git reset --soft 使用回退多了,说白 ...
- git reset命令详解
开门见山,先抛出一张图,之后再细讲. 首先,先解释下图中的一些名词. 一.名词解释 1. Working Copy:当前工作目录下的文件,一般指,有修改,没有git add,没有git commi ...
- git reset revert 回退回滚取消提交返回上一版本
总有一天你会遇到下面的问题. (1)改完代码匆忙提交,上线发现有问题,怎么办? 赶紧回滚. (2)改完代码测试也没有问题,但是上线发现你的修改影响了之前运行正常的代码报错,必须回滚. 这些开发中很常见 ...
- git reset简介
本文编辑整理自:http://guibin.iteye.com/blog/1014369 http://hi.baidu.com/tiger_tnt/blog/item/a0464ffa6a8115d ...
- git版本回退(git reset、git revert、git stash)
文章目录 回退的两种情况 1.已 commit,未push到远程仓库. 1.1 git reset --soft (撤销commit) 1.2 git commit --amend(修改commit ...
- git reset 命令详解 git revert命令详解。
git reset 命令详解 reset命令 介绍 参数 补救 git revert命令 revert说明 举例: 命令 reset命令 介绍 git reset 命令格式为: git reset [ ...
- git reset hard/soft/mixed区别
git reset hard/soft/mixed区别 git reset --soft git reset --mixed或者 git reset (默认是git reset --mixed) gi ...
- git reset --mixed, - soft和--hard有什么区别?
我希望拆分提交,不知道要使用哪个重置选项. 我在看页面你能解释一下"git reset"用简单的英语做什么吗? ,但我意识到我并不真正理解git索引或临时区域是什么,因此解释没有帮 ...
最新文章
- Go 学习笔记(84)— Go 项目目录结构
- linux安装完redis之后log会在,Linux安装redis logstash
- C# winform版 nbtstat
- es查询java代码如何排序_elasticsearch 查询聚合结果排序
- 处理JSON格式的数据
- .NET 之美-认识.NET平台
- 【android-tips】关于android应用R文件无法读取
- Anbox 和 LXC 代码规模
- ABAP COMMIT WORK关键字在CRM content management应用里的使用场景
- ViewRoot,DecorView,MeasureSpec和View的工作原理——Android开发艺术探索笔记
- spock 集成测试_使用Spock Mocks进行Grails 3.3集成测试
- python海龟绘图圆形_python之海龟绘图
- golang基础之初识
- win10备份为wim_经典好用系统安装备份工具一键恢复CGI-plus v5.0.0.4 增强版
- idea设置字体不生效的问题
- 如何看待网络直播中的弹幕文化?
- 程序员接单网站哪个好(盘点十大程序员接私活平台)
- 计算机一级表格技巧,计算机一级考试MS Office应试技巧指导
- 爬虫英雄联盟官网的全英雄介绍和技能介绍
- mysql 添加 删除索引(index) alter table 修改字段 修改列