一把剪刀看懂git reset 和它的三个参数
都说git 命令难记且难懂,但是如果从立体的角度看待git与git管理的版本,那么一切都会明朗许多。
大多数的学习教程为了理解git,会绘制几个圆圈的串联,每个圆圈代表一个commit的版本,也就是从时间线上看git 是一串commit。大多数时候这样的理解是足够了,但是如果当使用git reset 命令的时候这样的一串圆圈并不能帮助我们理解git reset 加上--hard、--soft和--mixed这三个参数究竟会发生什么。
比如git reset commit B --soft, 我们的工作目录是什么样子,stage里面是什么?
使用串联起来的圆圈的模型会让我们无所适从,而许多人应该都是通过记忆这个命令产生的效果来知道这个命令之后代码处于什么状态,或者是用多了也就知道了,或者是搜索一下。
实际上,如果我们使用本文一开始的图片来理解,不用搜索,不用使用很多次(大部分时候用了好多次也会忘记),就会知道git reset 那三个参数发生了什么。

使用git reset 命令的时候,头脑里面浮出图片, 然后想象自己手中拿着一把剪刀,当使用git reset --mixed commit x时,就是把commit x 的红色的线剪掉,这时候我们就处在commit x的最下面,也就是我们的working dir相当于我们将要把版本x 进行add和commit的时候。
如果使用的是git reset --soft commit x, 就是用剪刀剪掉了commit x的黄色的线,我们这时候处于stage了代码,将要把代码commit 成x的阶段。
如果使用了git reset --hard commit x,就是用剪刀剪掉了 commit x左边的黑色线条,这时候我们处于commit x的前一个commit 中,比如x等于B,那么我们这时相当于刚刚commit了A。
原文首发于:https://zhuanlan.zhihu.com/p/28642742
一把剪刀看懂git reset 和它的三个参数的更多相关文章
- 一张图看懂git push
基本用法 上面的四条命令在工作目录.暂存目录(也叫做索引)和仓库之间复制文件. git add files 把当前文件放入暂存区域. git commit 给暂存区域生成快照并提交. git rese ...
- git reset 版本回退的三种用法总结
git reset (–mixed) HEAD~1 回退一个版本,且会将暂存区的内容和本地已提交的内容全部恢复到未暂存的状态,不影响原来本地文件(未提交的也不受影响) git reset –soft ...
- 如果看懂git -help
每一个git 命令,都可以git * --help 打开git 的网页去看详细内容,也可以git * -help 在当前命令行里面看. 如下: zy@caoxinyu MINGW64 /f/git/i ...
- 学习如何看懂SQL Server执行计划(三)——连接查询篇
三.连接查询部分 --------------------嵌套循环-------------------- /* UserInfo表数据少.Coupon表数据多嵌套循环可以理解为就是两层For循环,外 ...
- git submodule临时分支;以及git reset使用
submodule 已经建立好了一个gitlab submodule形式的repo: 在repo A下面有一个submodule B, A --> B. clone -b branch [rep ...
- Git撤销&回滚操作(git reset 和 get revert)
转自:https://blog.csdn.net/asoar/article/details/84111841 git的工作流 工作区:即自己当前分支所修改的代码,git add xx 之前的!不包括 ...
- Git学习笔记--实践(三)
文中红色的文字(标为:## 插曲)是在Git学习/实践过程中,我个人遇到的一些问题,每个“## 插曲”之后,都有相应的解决方案. 一.创建版本库 版本库又名仓库,英文名repository,可简单的理 ...
- 看完我的笔记不懂也会懂----git
Git学习笔记 - 什么是Git - 首次使用Git - DOS常用命令 - Git常用命令 - 关于HEAD - 版本回退 - 工作区.暂存区与版本库 - git追踪的是修改而非文件本身 - 撤销修 ...
- 追源索骥:透过源码看懂Flink核心框架的执行流程
li,ol.inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-bottom:20px}dt, ...
随机推荐
- Django 的 路由系统
Django 的路由系统 URL 配置(URLconf)就像Django 锁支撑网站的目录. 它的本质就是URL 与要为该URL 调用的视图函数之间的映射表. 你就是以这种方式告诉Django, 对于 ...
- L2-014. 列车调度 (DP)
火车站的列车调度铁轨的结构如下图所示. Figure 两端分别是一条入口(Entrance)轨道和一条出口(Exit)轨道,它们之间有N条平行的轨道.每趟列车从入口可以选择任意一条轨道进入,最后从出口 ...
- C# 获取外网IP和运营商和城市
/// <summary> /// 获取客户端外网IP,省份,城市,运营商 /// 2012年12月18日 15:07 /// </summary> public class ...
- iOS内购流程二(添加产品、沙盒账号以及上架流程)
注意:使用了IAP的App必须先配置好协议.税务和银行业务 一.创建一个App应用 1.登录iTunes Store,点击我的App 2.新建一个App(如果App已经创建,直接点击App进入就行了) ...
- WPF在ViewModel中绑定按钮点击(CommandBase定义)
定义CommandBase public class CommandBase:ICommand { private readonly Action<object> _commandpara ...
- PHP操作Redis常用技巧总结【转】
一.Redis连接与认证 //连接参数:ip.端口.连接超时时间,连接成功返回true,否则返回false $ret = $redis->connect('127.0.0.1', 6379, 3 ...
- 洛谷P1014 Cantor表
P1014 Cantor表 题目描述 现代数学的著名证明之一是Georg Cantor证明了有理数是可枚举的.他是用下面这一张表来证明这一命题的: 1/1 1/2 1/3 1/4 1/5 … 2/1 ...
- mCustomScrollbar 滚动条的使用
前两天需要设置滚动条的样式,一开始我以为只是用css设置就可以了,嗯,果然还是想的很简单,虽然可以在css设置滚动条样式,但是只是在火狐,IE浏览器上根本就不能用,所以只能使用js插件来设置滚动条的属 ...
- [转] iOS开发-搜索栏UISearchBar和UISearchController
原文网址: http://www.cnblogs.com/xiaofeixiang/p/4273620.html?utm_source=tuicool iOS中UISearchDisplayContr ...
- [WebShow系列] 倒计时展示相关问题
WebShow内置了倒计时功能. 后台参数维护: 倒计时参数说明: 倒计时基准时间设置(秒数):假设设置为90,也就是从1分30秒开始倒计时,同时有开始提示音. 倒计时提示1剩余秒数:假设设置为30, ...