先看看工作区、暂存区和本地版本库的关系
你的项目就在工作区,对于项目新建的文件你必须先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的区别和用途详讲相关推荐

  1. a commit git 参数是什么意思_Git中的git reset的三种参数的区别

    我们平时在使用git的时候,经常会遇到需要撤销上次操作的需求,这时候需要用到git reset的这个命令,他的使用就是 "git-reset – Reset current HEAD to ...

  2. git reset --soft 版本回退多了,怎么恢复?

    正常可能是想git reset --soft 回退到上一版本,不小心回退到了历史的某个版本,本地出现了一堆未提交的文件,想恢复到最新版本,怎么搞? git reset --soft 使用回退多了,说白 ...

  3. git reset命令详解

    开门见山,先抛出一张图,之后再细讲.  首先,先解释下图中的一些名词.  一.名词解释 1. Working Copy:当前工作目录下的文件,一般指,有修改,没有git add,没有git commi ...

  4. git reset revert 回退回滚取消提交返回上一版本

    总有一天你会遇到下面的问题. (1)改完代码匆忙提交,上线发现有问题,怎么办? 赶紧回滚. (2)改完代码测试也没有问题,但是上线发现你的修改影响了之前运行正常的代码报错,必须回滚. 这些开发中很常见 ...

  5. git reset简介

    本文编辑整理自:http://guibin.iteye.com/blog/1014369 http://hi.baidu.com/tiger_tnt/blog/item/a0464ffa6a8115d ...

  6. git版本回退(git reset、git revert、git stash)

    文章目录 回退的两种情况 1.已 commit,未push到远程仓库. 1.1 git reset --soft (撤销commit) 1.2 git commit --amend(修改commit ...

  7. git reset 命令详解 git revert命令详解。

    git reset 命令详解 reset命令 介绍 参数 补救 git revert命令 revert说明 举例: 命令 reset命令 介绍 git reset 命令格式为: git reset [ ...

  8. git reset hard/soft/mixed区别

    git reset hard/soft/mixed区别 git reset --soft git reset --mixed或者 git reset (默认是git reset --mixed) gi ...

  9. git reset --mixed, - soft和--hard有什么区别?

    我希望拆分提交,不知道要使用哪个重置选项. 我在看页面你能解释一下"git reset"用简单的英语做什么吗? ,但我意识到我并不真正理解git索引或临时区域是什么,因此解释没有帮 ...

最新文章

  1. Go 学习笔记(84)— Go 项目目录结构
  2. linux安装完redis之后log会在,Linux安装redis logstash
  3. C# winform版 nbtstat
  4. es查询java代码如何排序_elasticsearch 查询聚合结果排序
  5. 处理JSON格式的数据
  6. .NET 之美-认识.NET平台
  7. 【android-tips】关于android应用R文件无法读取
  8. Anbox 和 LXC 代码规模
  9. ABAP COMMIT WORK关键字在CRM content management应用里的使用场景
  10. ViewRoot,DecorView,MeasureSpec和View的工作原理——Android开发艺术探索笔记
  11. spock 集成测试_使用Spock Mocks进行Grails 3.3集成测试
  12. python海龟绘图圆形_python之海龟绘图
  13. golang基础之初识
  14. win10备份为wim_经典好用系统安装备份工具一键恢复CGI-plus v5.0.0.4 增强版
  15. idea设置字体不生效的问题
  16. 如何看待网络直播中的弹幕文化?
  17. 程序员接单网站哪个好(盘点十大程序员接私活平台)
  18. 计算机一级表格技巧,计算机一级考试MS Office应试技巧指导
  19. 爬虫英雄联盟官网的全英雄介绍和技能介绍
  20. mysql 添加 删除索引(index) alter table 修改字段 修改列

热门文章

  1. Emily Dickinson 《Not In Vain》
  2. 成人脑力训练 3.951
  3. 2019中国彩票市场行业分析
  4. Spring 源码分析(一) —— 迈向Spring之路(转载)
  5. NancyFX 第五章 Nancy 路由
  6. 关于移动端使用position:fixed/absolute出现随屏幕滚动情况
  7. BAT-医疗知识图谱相关产品分析介绍
  8. 苹果签名市场变天,频繁封杀到底是什么原因?
  9. 第6章第23节:文字视觉化:使用图片来诠释文字的涵义 [PowerPoint精美幻灯片实战教程]
  10. 解决百度网盘上传请求中或上传慢的方法