git常用命令(三)版本控制三种方法git reset 以及reset 的hard、soft 、mixed三个参数的区别

版本控制原理

HEAD指针移动(HEAD指针见)

三种控制方法(good为例)

在这里插入图片描述

1、基于索引值操作(推荐)//版本前进后退都可以

git reset --hard index
index是git reflog中的哈希值,是局部索引值,虽然只有一部分但是这部分唯一确定一个版本足够了 index选中即是复制这里从iiiii回退到了ffff版本
在这里插入图片描述
HEAD is now at e4161ce insert ffffffffffff good.text
哈希值后边是我们当初自己写的commit message
此时git reflog发现HEAD指向变了
在这里插入图片描述
注意两行HEAD->master 哈希值是一样的 后面的日志不一样 一个是reset 一个是commit message

版本前进也是使用reset命令 自己选择对应的版本哈希值即可

2、使用异或符号^ //只能版本后退

git reset --hard HEAD^
在这里插入图片描述

当前HEAD在6 7fae0a (HEAD -> master) HEAD@{7}
执行git reset --hard HEAD^后到了fb3310d
辨析 注意b3310d 所指向文件不是good是bad 因为自己测试时候建立了两个文件 把bad当成good就好

此时用分别用git log 和 git reflog 输出日志当前HEAD都是在fb3310d,但是需要区别git log只输出当前版本HEAD之前的版本即HEAD{9-12},而reflog是输出全部不管是当前版本的过去还是未来 HEAD{0-12}
在这里插入图片描述
异或每次只能回退一步
若要回退多步则用多个异或^符号 如回退三步
git reset --hard HEAD^^^

缺点若后退很多步 ^需要数很多个

3、使用波浪线符号~
git reset --hard HEAD~5
~后面数字是几就回退几步
在这里插入图片描述

总结

版本控制三种方法:
git reset --hard index
git reset --hard HEAD^
git reset --hard HEAD~5

最佳组合 git reset --hard index + git reflog

reset三个参数对比 推荐 hard
soft 在本地库移动HEAD指针
在这里插入图片描述

mixed 在本地库移动HEAD指针 + 重置暂存区
在这里插入图片描述

hard 在本地库移动HEAD指针 + 重置暂存区 + 重置工作区
在这里插入图片描述当前本地库HEAD在mmmmmm,soft rest后虽然reflog发现HEAD已经变成了51550bb 但是我们cat一下本地文件工作区发现文件内容还是停留在mmmm状态工作区没变
此时通过git status查看暂存区状态发现modified是绿色的 暂存区也没变

在这里插入图片描述
接着reset mixed回退 HEAD变了,cat显示工作区没变仍停留在mmmmmm,但是暂存区变了,modified变成了红色
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值