原创实战Git:Git中reset的--soft、--mixed、--hard的区别?

Git中reset的–soft、–mixed、–hard的区别?

前言

今天来记录一下git中进行版本回溯中要使用到的git reset命令,看了很多资料,都没有把这个命令讲解得很清楚;那么我们就来讨论下

  • git reset命令到底做了什么?
  • 有什么区别?
  • 我们应该怎样使用?

先来交代一下我们的实战环境,先用git初始化好一个库,再用git依次添加1.p、2.p、3.p 3个文件到git仓库中,并依次产生3个commit消息分别为edtion1,editon2,edition3

我们先用git log查看此时edition3的唯一字符串,如d56x8f7a,将其先存起来,我们后面实战有用。

在这里插入图片描述

命令 “git reset --soft [版本号]”

在这里插入图片描述
当前我们的本地库HEAD指向最新的edition3,我们将回退两个版本回退到edition1

$ git reset --soft master^^ 
$ git reset --soft master~2
$ git reset --soft HEAD^^
$ git reset --soft HEAD~2
$ git reset --soft edition3^^ #这里用edition3代替git log中的唯一字符串
$ git reset --soft edition3~2
# 以上都是等价命令,使用其中一个,回退到edition版本3的前两个版本,也就是回到edition1,文件只有1.p的时候

git此时所做的操作,让我们的本地库LocalRepository就将head指针指向了edition1这个版本,暂存区和工作目录保持不变,两个都还是原来的1.p、2.p、3.p 3个文件。

$ git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	new file:   2.p
	new file:   3.p

此时,使用git status命令查看,暂存区里,相对于LocalRepository指向的edition1里的只有1.p文件, 2.p、3.p都可以被称为是新文件

命令 “git reset --mixed [版本号]”

在这里插入图片描述

为了接下来演示方便,我们先执行

git reset --hard "之前让保存的edition3唯一字符串"

这条命令先不管,它所起的作用就是让我们回到edition3的状态

此时,我们准备工作做好了,已经回到edition3状态,也就是图左边所示。

开始演示:我们执行

git reset --mixed master^^ #用mixed回退到edition1的状态

此时,这条命令所起的作用就是,将Local Repository本地库的指针指向了edition1,并用本地库edition1里的1.p覆盖掉暂存区index,注意,这里是先删除并清空原有的暂存区里的内容,再用edition1里的内容覆盖。

此时我们使用git status命令,

$ git status
On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)
	2.p
	3.p

nothing added to commit but untracked files present (use "git add" to track)

在这里插入图片描述

那么我们此时用git status命令查看,工作目录里的1.p、2.p、3.p文件相对于暂存区index的1.p文件,工作目录的2.p、3.p都变成了未追踪文件

命令 “git reset --hard [版本号]”

在这里插入图片描述

还是使用以下命令先还原我们的操作环境

git reset --hard "之前让保存的edition3唯一字符串"

此时,我们准备工作做好了,已经回到edition3状态,也就是图左边所示。

开始演示:我们执行

git reset --hard master^^ #用hard回退到edition1的状态

此时我们的命令是如此的工作:先将Local Repository本地库的head指针指向edition1,再依次删除并清空暂存区Index和工作目录Working Directory的所有文件,并依次使用edition1里的文件1.p来覆盖暂存区与Working Directory工作目录。

此时使用git status,可以预知,肯定显示的没有什么可提交的;

$ git status
On branch master
nothing to commit, working tree clean

在这里插入图片描述

总结

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/sinat_26394043/article/details/132723994
今日推荐