git常用命令一 git reset

常用场景:当你在工作的时候发现之前commit的提交的代码有问题,你想撤回在本地commit提交,最简单的方法就是git reset

下面介绍下git reset的原理和常用的option参数;

git reset就是可以让HEAD这个指针指向其他的节点。比如我们有一次commit不是不是很满意,需要回到上一次的Commit里面。那么这个时候就需要通过reset,把HEAD指针指向上一次的commit的点。
在这里插入图片描述
在介绍常用参数之前,先复习下之前关于本地git add commit 的流程,本地git区域总体分为三块:

  • Working Tree 工作区
  • index/Stage 暂存区,和git stash命令暂存的地方不一样。使用git add xx,就可以将xx添加近Stage里面
  • Respository 提交历史,即是你git commit 的历史

在这里插入图片描述

文件存入Repository流程:

文件更改->提交暂存->提交到respository。

  1. 刚开始的时候,working tree 、 index 与 repository(HEAD)的文件是一样的。
    在这里插入图片描述

  2. 当git管理的文件夹里面的内容出现改变后,此時 working tree 的內容就会跟 index 及 repository(HEAD)的不一致,而Git知道是哪些文件(Tracked File)被改动过,直接将文件状态设置为 modified (Unstaged files)。
    在这里插入图片描述

  3. 当我们git add 后,工作区的文件提交到暂存区,文件状态(staged),所以此时working tree跟index的內容是一致的,但他们与repository(HEAD)內容不一致。
    在这里插入图片描述

  4. 当我们git commit,把暂存区的文件提交到Repository(HEAD)后,创建新的节点(HEAD)。建立出新的 commit 节点(HEAD)后, working tree 、 index 與与repository(HEAD)区域的内容 又会保持一致。
    在这里插入图片描述

git reset 参数

git reset [--hard|soft|mixed|merge|keep]

git reset [–hard|soft|mixed|merge|keep] [或HEAD]:将当前的分支重设(reset)到指定的或者HEAD(默认,如果不显示指定,默认是HEAD,即最新的一次提交),并且根据[mode]有可能更新索引和工作目录。

1. git reset --hard

没有指定节点, 默认把 HEAD指针移动到最新的一次提交,然后重置工作区和暂存区,清除所有改动。

2. git reset --soft

会在重置 HEAD 和 branch 时,保留工作目录和暂存区中的内容,并把重置 HEAD 所带来的新的差异放进暂存区。
--soft 和 --hard 的区别:--hard 会清空工作目录和暂存区的改动,*而 --soft则会保留工作目录的内容,并把因为保留工作目录内容所带来的新的文件差异放进暂存区。

3. git reset --mixed

reset 如果不加参数,那么默认使用 --mixed 参数。它的行为是:保留工作目录,并且清空暂存区。也就是说,工作目录的修改、暂存区的内容以及由 reset 所导致的新的文件差异,都会被放进工作目录。简而言之,就是「把所有差异都混合(mixed)放在工作目录中」。

参考: Git Reset 三种模式 作者:carway

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值