先介绍三种状态:
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: 空