开门见山,先抛出一张图,之后再细讲。 
首先,先解释下图中的一些名词。 

一.名词解释

1. Working Copy:当前工作目录下的文件,一般指,有修改,没有git add,没有git commit的文件
2. Index:也可以被认为是staging area(暂存区),也就是使用git add添加后的文件,是一堆将在下一次commit中提交的文件,提交之后它就是当前 HEAD的父节点。
3. HEAD:指向当前branch最顶端的一个commit,也就是该分支最近一次commit后的节点
上图的上部分解释如下: 
当你第一次checkout一个新的分支,HEAD指向该分支上最近一次commit。它和index和working copy是一样一样的。
当你修改了一个文件,你的working copy不再和index和HEAD相同了,所以当文件有改动,它会标记这些文件。
然后,你执行git add命令,这条命令会将上面修改的文件缓存在index中,你的working copy和index相同了,而他们俩和HEAD不同了”。
当你执行git commit,Git创建了一个新的commit,HEAD这时指向这个新的commit,此时,HEAD & index & working copy又相同了

二.reset命令

git reset 命令格式为git reset [--soft | --mixed | --hard] [<commitId>]
是git中最常用的命令,但也是最危险,最容易被误用的命令。reset命令本身很简单,但是它的参数让人迷惑,主要的参数有soft、 mixed、hard,它们告诉Git,当执行reset时,要对index和working copy做什么。
s oft
--soft参数只告诉Git将其他的commit重置到HEAD,就仅此而已。index和working copy中的文件都不改变。
实例:
git reset --soft [commitId] 回退到某个版本,只回退了commit的信息。如果还要提交,直接commit即可
m ixed (默认参数)
--mixed 改变HEAD和index,指向那个你要reset到的commit上。而working copy文件不被改变。当然会显示工作目录下有修改,但没有缓存到index中。
h ard
--hard HEAD & index & working copy同时改变到你要reset到的那个commit上。这个参数很危险,执行了它,你的本地修改可能就丢失了。
注意: commitId是每次commit的id,可以通过git log来进行获取

三.加餐

1.恢复git reset —hard的误操作
有时候不小心通过git reset —hard将版本回退到之前的commit了。可以先通过 git reflog命令,找到要退回的commitId,然后通过命令git reset —hard commitId来恢复
2.git revert 和 git reset的区别 
a. git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit。 
b. 在回滚这一操作上看,效果差不多。但是在日后继续merge以前的老版本时有区别。因为git revert是用一次逆向的commit“中和”之前的提交,因此日后合并老的branch时,导致这部分改变不会再次出现,但是git reset是之间把某些commit在某个branch上删除,因而和老的branch再次merge时,这些被回滚的commit应该还会被引入。
c. git reset 是把HEAD向后移动了一下,而git revert是HEAD继续前进,只是新的commit的内容和要revert的内容正好相反,能够抵消要被revert的内容。
参考:
https://blog.csdn.net/qq_22705681/article/details/89327791
https://www.cnblogs.com/0616--ataozhijia/p/3709917.html

git reset命令详解相关推荐

  1. git reset 命令详解(二)—— Git 学习笔记 08

    git reset 命令详解(二) 上一篇博文git reset 命令详解(一)讲了 git reset 命令的基本原理和用法,这篇博文谈一谈 git reset 的另一种用法--后面跟一个路径(或文 ...

  2. git reset 命令详解(一)—— Git 学习笔记 07

    git reset 命令详解(一) 简而言之,git reset 命令是用来将当前 branch 重置到另外一个 commit 的,这个动作可能同时影响到 index 以及 work director ...

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

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

  4. git checkout 命令详解—— Git 学习笔记 16

    git checkout 命令详解 概览 git checkout 这条命令的常用格式如下: 用法一 git checkout [<commit>] [--] <paths> ...

  5. Git 常用命令详解

    Git 常用命令详解 1. Git 常用命令 1.1 常用git 命令图表汇总 1.2 配置个人信息 1.3 创建版本库 1.4 常用Git命令汇总 2. Git 解决代码冲突 3. Git 分支管理 ...

  6. git log 命令详解

    git log 命令详解 git log 命令用于查看提交历史: git log [options] [<file> <commit> <tag>...] 如果不加 ...

  7. git diff命令详解

    git diff命令详解 diff里面a表示前面那个变量,b表示第二个变量 HEAD     commit版本 Index     staged版本 a.查看尚未暂存的文件更新了哪些部分,不加参数直接 ...

  8. 运维之道 | Git log 命令详解

    Git log 命令详解 Git log 可以让我们查看提交commit history [root@localhost villian]# git log commit 7a690b414f87fb ...

  9. Git stash命令详解和使用

    Git stash命令详解和使用 stash的原理: 将本地没提交的内容(git commit的内容不会被缓存 但git add的内容会被缓存)进行缓存并从当前分支移除,缓存的数据结构为堆栈,先进后出 ...

最新文章

  1. STM32F0使用LL库实现Modbus通讯
  2. LwIP Application Developers Manual12---Configuring lwIP
  3. Kraken采用CashAddr地址,BCH地址统一向前一步
  4. 19、计算机图形学——蒙特卡洛路径追踪
  5. 使用Spring Boot开发Web项目
  6. openSSH离线升级(6.6->7.9),解决Linux安全漏洞(CVE-2018-15473)
  7. python dict下标_牛鹭学院:必须掌握的Python数据结构知识
  8. Apache for windows虚拟主机配置方案(安全优化)
  9. Matlab画图函数与参数
  10. NXP Zigbee 3.0标准网关开发复盘(JN5169)
  11. 学位论文写作规范之论文选题、开题报告、毕业论文
  12. html5考试总结300字,期中考试总结
  13. 转一篇张欣写的Ubuntu扩展安装
  14. Scala历史版本在哪里??
  15. 机器学习之金融信贷风控(一)互联网金融业申请评分卡的介绍
  16. js实现键盘数字输入
  17. android ocr 中文版,android ocr
  18. 史上最全Hashmap面试总结,51道附带答案,持续更新中...
  19. 用matlab实现任意点图片的旋转_图像旋转MATLAB实现代码
  20. oracle 创建 temporary tablespace group

热门文章

  1. JAVA开发运维(关于渗透测试与漏洞修复)
  2. e5430支持服务器内存,手贱!入手了逆天护舒宝771四核E5430平台,再战IGAME GTX650TI BOOST...
  3. 如何开始编写微信小程序
  4. 轻量级姿态估计技巧综述
  5. 小米9008授权 授权救砖 教程
  6. PB级大规模Elasticsearch集群运维与调优实践
  7. MySQL创建视图语法,MySQL视图的作用
  8. d3.js:取代d3.mouse的d3.pointer
  9. node.js菜鸟问题—— data被报无定义
  10. 克鲁斯卡尔算法与普里姆算法详解