🎁个人主页:我们的五年****
🔍系列专栏:Linux网络编程****
🌷追光的人,终会万丈光芒
🎉欢迎大家点赞👍评论📝收藏⭐文章
********

相关笔记:
https://blog.csdn.net/djdjiejsn/category_12893502.html
第一篇:https://where.blog.csdn.net/article/details/145606565?spm=1001.2014.3001.5502
第2篇:https://where.blog.csdn.net/article/details/145610968?spm=1001.2014.3001.5502
前言:
这篇讲的主要就是版本回退,回退到之前的版本。
目录
[1.2git reset命令](#1.2git reset命令)
[2.2commit id用单向链表进行管理](#2.2commit id用单向链表进行管理)
3.2在工作区修改,并且进行add操作,没有进行commit操作
3.3进行了commit操作,但是没有进行push到远程仓库
1.版本回退:
1.1背景
当我们想回退到某个特定的版本的时候,我们就可以进行版本回退。
回退指的是版本库里面的版本。缓存区,工作区里面的内容由命令决定。
1.2git reset命令
命令基本格式:
git reset [--soft | --mixed | --hard] [HEAD]
git reset [--soft | --mixed | --hard] [HEAD]
选项
|-------------------------|-----------------------------|----------------------|
| --soft | 重置版本库 | 保留工作区 ,缓存区更改 |
| --mixed(不带参数时的默认选项) | 重置版本库 ,缓存区 | 保留工作区更改 |
| --hard (慎用) | 重置版本库 ,缓存区 ,工作区 | 全部被重置 |
这三个选项三选一,如果不带参数,默认就是--mixed。
[HEAD]
🥮1.写法一:
可直接写成 commit id,表示指定退回的版本。
🥮2.写法2:
HEAD 表⽰当前版本
HEAD^ 上⼀个版本
HEAD^^ 上上⼀个版本
🥮2.写法3:
HEAD~0 表⽰当前版本
HEAD~1 上⼀个版本
HEAD~2 上上⼀个版本
为什么--hard选项要慎用?
因为如果我们在工作区进行了编写代码,如果直接用--hard,那么工作区没有进入版本库里面的代码就消失了,再也找不到了。
1.3注意事项:
我们可以用git log查看commit id,然后根据commit id就可以回退到指定的版本。然后我们再用,发现log也变化了,之前的commit id不见了。那么如果我们又想退回了。那么我们也不知道那个版本的commit id了呀。
用HRAD^也是回退到当前master分支下的前一个版本。
这时候就要用git reflog 查看每次的回退的信息了。
git reflog
最前面的这些也可以作为HEAD直接进行版本回退。
输入哪个就回退到哪个版本。
2.为什么版本库退回很快?
2.1原因:
因为版本回退,每一次的更新,修改,都是HEAD指针在变,HEAD指向的是master,master里面放的是最新一次的commit id。
所以回退HEAD指向之前的commit id值。

2.2commit id用单向链表进行管理
我们发现,每次提交,HEAD指向新的commit id,然后每一个commit id文件里面保存着上一个commit id。(parent)


3.撤销修改
3.1只在工作区进行了修改,还没有add操作
执行下面命令,记住--是两个杠,不能写错,写错就是另外的意思了。
git checkout -- [file]
这个场景就适用于,我们之前已经之前的代码都已经add,commit操作了。然后我们再在工作区进行开发,后面我们想撤销到最新一次的commit的内容。就使用上面的命令。
3.2在工作区修改,并且进行add操作,没有进行commit操作
方法一:
直接进行hard操作,回退到当前版本库的内容。
git reset --hard HEAD [filename]
方法二:
进行--mixed操作,再进行git checkout -- 操作
git reset --hard HEAD [filename]
git checkout -- [filename]
3.3进行了commit操作,但是没有进行push到远程仓库
前提条件,没有进行push操作,提交到远程仓库
git reset --hard HEAD^
4.删除文件
对工作区进行删除,新增,修改,都是对工作区进行变动,都可以进行git add,gitcommit 操作。
要删除一个文件,我们可以现在工作区进行删除,然后再进行add,commit操作,就把版本库里面的指定文件也删除了。
还有一个就是git提供的删除文件的操作。
git rm [filename]
git rm [filename]
这个命令会直接把工作区和暂存区的这个文件都删除。
然后再进行commit操作就可以了。
