git reset soft/hard/mixed区别和理解

git reset soft/hard/mixed区别和理解

先介绍三种状态:

HEAD(头)

指向当前分支最顶端的一个提交记录,也就是在当前分支你最近的一个提交

Index(索引)

index也被称为staging area,是指一系列即将被提交的文件/文件夹队列。即下次commit的内容,提交之后它就是 HEAD的父节点,也就是git add的文件。

Working Copy(工作副本)

当前工作目录下的文件,在本地修改但是没有git add的文件

git提交流程是:修改内容(working copy) --> git add放到暂存区已备提交(staging area) --> git commit (提交 HEAD) --> push(推到远程分支)

Soft

--soft,改变HEAD。将HEAD重置到某一commit,并把中间的commit记录放到Index中。

Mixed (默认)

 --mixed改变HEAD和Index,它将重置HEAD到某一commit,并且将中间的commit记录和Staging area文件都返回到Working copy状态下。

Hard

--hard 改变HEAD 和 Index 和 workingcopy重置到某一commit,中间的commit修改记录和Staging area的修改文件和Working copy的修改文件将全部丢失,并更新到这一commit的状态。具有破坏性。如果删除,可以get reflog了解一下。

举例说明:

#已有仓库记录:C1->C2
#修改 tuine,tuine1,tuine1
#此时Working Copy中就有了tuine,tuine1,tuine2

git add tuine
#此时
#Working Copy: tuine1,tuine2
#Staging area: tuine

git commit -m '测试'
gt add tuine2

#此时
#Working Copy: tuine1
#Staging area: tuine2
#则产生一条记录:C1->C2->C3(HEAD指向C3)

#如果执行
git reset C2 --soft
#变为C1->C2(HEAD指向C2),C3修改的tuine转到了Staging area
#Working Copy: tuine1
#Staging area: tuine2,tuine

#如果执行
git reset C2 --mixed #或git reset C2
#变为C1->C2, C3修改的tuine转到了Working Copy,Staging area内容也转到Working Copy
#Working Copy: tuine1, tuine2, tuine
#Staging area: 空

#如果执行
git reset C2 --hard
#变为C1->C2, C3修改的tuine,Staging area(tuine2)和Wroking Copy(tuine1)内容都重置到C2
#Working Copy: 空
#Staging area: 空

这下都明白了吧~~

发表评论