Git--版本控制(二)版本回退
2016-12-14 本文已影响2006人
Levi_Wan
Git--版本控制(部分引用)廖雪峰老师
-
上一章讲到了commit到版本库中,接着上一章进行操作。
-
接着我们现在使用git status查询仓库的状态。可以发现与之前的status都不一样,提示我们处于的master分支中,没有东西需要commit,工作树(工作区)也是干净的(没改动的)
![](https://img.haomeiwen.com/i3600976/2d72cab471a66353.png)
- 接着我们开始对文件进行改动。我们修改frist文件,并保存。
![](https://img.haomeiwen.com/i3600976/08dad33a02a60fdb.png)
- 在进行状态查询。
![](https://img.haomeiwen.com/i3600976/c04ac44758a3e3e4.png)
- 可以看见我们所追踪了的文件被修改了,可以add命令进行更新,也可以使用checkout来放弃修改。 这里我们使用diff(difference)命令来查看我们的修改。
![](https://img.haomeiwen.com/i3600976/90ff4db6e2a465b1.png)
- 可以清楚的看见我们的对文件进行的修改(注意,图片视频等二进制的智能显示大小变比无法知晓修改),接着我们重新add,和commit。
![](https://img.haomeiwen.com/i3600976/2f09e583774ce8f8.png)
- 此时我们可以发现修改成功,我们在向master分支中多添加两个文件。
![](https://img.haomeiwen.com/i3600976/22fd5033a82ed334.png)
![](https://img.haomeiwen.com/i3600976/138fc25dc7a36f8a.png)
重点!此时我们的git就出现了多个版本。通过git log查询
![](https://img.haomeiwen.com/i3600976/ccd85369cf575005.png)
- 其中commit后面的为16进制的版本ID,(在SVN中commit id为int型1,2,3,4,......)
版本回退。
- 如果我们对于此操作不满意或者说出现了严重的BUG,想要回到上一版本该如果做呢?
我们每提交一个新版本,实际上Git就会把它们自动串成一条时间线也即是log。那么我们如果进行版本回退呢? git reset 命令进行版本回退。
首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交18b01ce5ac.......(每个ID不一样),上一个版本就是HEAD,上上一个版本就是HEAD,当然往上100个版本写100个比较容易数不过来,所以写成HEAD~100。
- 使用git reset --hard HEAD^ 回到上一版本
- HEAD为一个版本指针,可以看见当前指针指向了modified Frist的那个版本
![](https://img.haomeiwen.com/i3600976/41adfe50f4bc506b.png)
![](https://img.haomeiwen.com/i3600976/bd053eb5cc89344d.png)
- 查看我们的文件夹,second和third文件都消失了。。。
![](https://img.haomeiwen.com/i3600976/a6d411f153ed8bf1.png)
- 我们同样可以继续使用回到又上一个版本。
![](https://img.haomeiwen.com/i3600976/3eabc0c8c1503a2e.png)
- 此时,我们查看frist.txt,并没有modified的痕迹。
![](https://img.haomeiwen.com/i3600976/fee98d641128e927.png)
如何回到没有回退之前的版本呢?
- 首先我们通过git reflog(它记录了我们所执行过的所有命令)
![](https://img.haomeiwen.com/i3600976/fa4da96015e00835.png)
- 全部16进制数为我们的commit id,我们可以通过id来进行倒退。
- 回到添加second和third的版本。
![](https://img.haomeiwen.com/i3600976/3b356cfd33305379.png)
![](https://img.haomeiwen.com/i3600976/7ee337796d47f10f.png)
- 对,你没有看错,我们回来了。
Git版本回退的速度为什么这么快?因为HEAD指针。
Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向I modified frist file:
![](https://img.haomeiwen.com/i3600976/48323d5c5844122b.png)
- 回退后:
![](https://img.haomeiwen.com/i3600976/821067e0c815ffc1.png)
然后顺便把工作区的文件更新了。所以你让HEAD指向哪个版本号,你就把当前版本定位在哪。
![](https://img.haomeiwen.com/i3600976/64d2247718f2d5e5.png)