版本重置
git作为分布式版本控制系统,避免不了各版本之间的切换,就需要用到版本重置,也叫做版本回退。
现在三个区中都有test.html这个文件,并且是相同的。
软重置
仅仅重置分支区版本,和工作区、暂存区没有关系。现在把分支区的版本进行回退。
如果回退之后,觉得还是不回退的好,不想回退了。这时可以重置到指定版本。
首先查看操作记录,找到需要重置到哪一个版本。
混合重置
仅重置暂存区和分支区版本,使用–mixed选项,是git reset的默认选项,在使用时也可以不写–mixed。
git reset --mixed HEAD^
回退到上一个版本,或者回退到指定版本
注意:
HEAD:当前版本
HEAD^:前一个版本
HEAD^^:前两个版本
HEAD~n:前n个版本
- 可用于撤销add到暂存区的文件git reset HEAD,意思就是说有一个文件已经添加到了暂存区,但是还没有提交到分支区,现在不想让这个文件存放在暂存区了,就可以用这个命令达到撤销添加的目的。
适用条件:暂存区中有,分支区中没有。 - 可用于撤销从暂存区删除的文件git reset HEAD 文件名,意思就是说有一个文件从暂存区中删除了,但是分支区中还存在,现在不想让这个文件从暂存区中删除,就可以用这个命令达到撤销删除的目的。
适用条件:暂存区中没有,分支区中有。
总的来说,就是使用混合重置,将暂存区和分支区重置回当前版本,根据分支区文件约束暂存区文件
硬重置
将工作区、暂存区、分支区这三个区的版本进行重置到指定版本。
git reset --hard 版本号
文件删除
想要进行文件删除,就要了解各分区之间的是否存在要删除的文件。
文件删除基础
- 向三区中都添加文件test.html,证明工作区、暂存区、分支区都有这个文件存在。
- 查看存放在暂存区中的文件:git ls-files
- 查看存放在暂存区+分支区中的文件:git ls-files --with-tree=HEAD
(只要暂存区或者分支区任一区又文件都会显示出来)
没有单独查看分支区的命令,但可以通过git ls-files查看暂存区,再通过git diff --cached将暂存区和分支区进行比较,从而判断两者中的文件是否相同或者缺少什么文件。
删除文件
- 删除暂存区中的文件
可以看出现在的暂存区没有了test.html文件,那工作区和分支区中的文件有没有受到影响呢?
工作区就直接再本地仓库文件夹中就可以看见。
分支区通过命令git ls-files --with-tree=HEAD
从图中可以看出,暂存区没有了,但暂存区+分支区还有,这就说明分支区中还存在test.html这个文件。
- 删除工作区+暂存区文件
可以看出工作区与暂存区中的hello.html文件都没有了。 - 删除分支区文件
这个操作就是可以直接通过命令删除暂存区的文件,然后将暂存区的文件全部提交到分支区,这样分支区就和暂存区保持一致,对于暂存区删除的文件分支区自然也没有了。 - 恢复删除的文件
恢复工作区、暂存区、分支区中都删除的文件。
实际上使用版本重置,将三个区的版本重置到还没有删除的状态,由于是三个区同时重置,所以使用的是硬重置。
可以看出暂存区的文件是完全恢复了的,但分支区的文件还是不能证明。
通过与暂存区的比较,可以判断出分支区的文件是和暂存区一样都是完全恢复了的。
至于工作区在文件夹中就可直接看出。
命令汇总
echo " " > [file]——将" “中的数据添加到文件中,并建立这个文件
echo " " >> [file]——向文件追加数据
git add [file] ——将文件添加到暂存区
git commit [file] -m " "——将暂存区文件提交到分支区,” "中可填写事务备注
git commit -m " " ——将暂存区文件全部提交
git reset --soft 版本号——软重置,针对分支区
git reset --mixed 版本号——混合重置,针对暂存区、分支区,–mixed可省略
git reset --hard 版本号——硬重置,针对三个区
git reset HEAD——撤销add到暂存区,适合暂存区有,分支区没有
git reset HEAD 文件名——撤销删除暂存区文件,适合暂存区没有,分支区有
git diff——对比工作区与暂存区文件差别
git diff -cached——对比暂存区与分支区文件差别
git ls-files——查看暂存区文件
git ls-files --with-tree=HEAD——查看暂存区+分支区文件
git reflog——查看操作版本记录
如有不对,还请指正。