Git--版本控制(部分引用)廖雪峰老师
-
上一章讲到了commit到版本库中,接着上一章进行操作。
-
接着我们现在使用git status查询仓库的状态。可以发现与之前的status都不一样,提示我们处于的master分支中,没有东西需要commit,工作树(工作区)也是干净的(没改动的)

- 接着我们开始对文件进行改动。我们修改frist文件,并保存。

- 在进行状态查询。

- 可以看见我们所追踪了的文件被修改了,可以add命令进行更新,也可以使用checkout来放弃修改。 这里我们使用diff(difference)命令来查看我们的修改。

- 可以清楚的看见我们的对文件进行的修改(注意,图片视频等二进制的智能显示大小变比无法知晓修改),接着我们重新add,和commit。

- 此时我们可以发现修改成功,我们在向master分支中多添加两个文件。


重点!此时我们的git就出现了多个版本。通过git log查询

- 其中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的那个版本


- 查看我们的文件夹,second和third文件都消失了。。。

- 我们同样可以继续使用回到又上一个版本。

- 此时,我们查看frist.txt,并没有modified的痕迹。

如何回到没有回退之前的版本呢?
- 首先我们通过git reflog(它记录了我们所执行过的所有命令)

- 全部16进制数为我们的commit id,我们可以通过id来进行倒退。
- 回到添加second和third的版本。


- 对,你没有看错,我们回来了。
Git版本回退的速度为什么这么快?因为HEAD指针。
Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向I modified frist file:

- 回退后:

然后顺便把工作区的文件更新了。所以你让HEAD指向哪个版本号,你就把当前版本定位在哪。

网友评论