Git--版本控制(二)版本回退

Git--版本控制(部分引用)廖雪峰老师

  • 上一章讲到了commit到版本库中,接着上一章进行操作。

  • 接着我们现在使用git status查询仓库的状态。可以发现与之前的status都不一样,提示我们处于的master分支中,没有东西需要commit,工作树(工作区)也是干净的(没改动的)

Paste_Image.png
  • 接着我们开始对文件进行改动。我们修改frist文件,并保存。
Git--版本控制(二)版本回退_第1张图片
Paste_Image.png
  • 在进行状态查询。
Git--版本控制(二)版本回退_第2张图片
Paste_Image.png
  • 可以看见我们所追踪了的文件被修改了,可以add命令进行更新,也可以使用checkout来放弃修改。 这里我们使用diff(difference)命令来查看我们的修改。
Git--版本控制(二)版本回退_第3张图片
Paste_Image.png
  • 可以清楚的看见我们的对文件进行的修改(注意,图片视频等二进制的智能显示大小变比无法知晓修改),接着我们重新add,和commit。
Git--版本控制(二)版本回退_第4张图片
Paste_Image.png
  • 此时我们可以发现修改成功,我们在向master分支中多添加两个文件。
Git--版本控制(二)版本回退_第5张图片
Paste_Image.png
Paste_Image.png

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

Git--版本控制(二)版本回退_第6张图片
Paste_Image.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的那个版本
Paste_Image.png
Git--版本控制(二)版本回退_第7张图片
Paste_Image.png
  • 查看我们的文件夹,second和third文件都消失了。。。
Git--版本控制(二)版本回退_第8张图片
Paste_Image.png
  • 我们同样可以继续使用回到又上一个版本。
Paste_Image.png
  • 此时,我们查看frist.txt,并没有modified的痕迹。
Git--版本控制(二)版本回退_第9张图片
Paste_Image.png

如何回到没有回退之前的版本呢?

  • 首先我们通过git reflog(它记录了我们所执行过的所有命令)
Git--版本控制(二)版本回退_第10张图片
Paste_Image.png
  • 全部16进制数为我们的commit id,我们可以通过id来进行倒退。
  • 回到添加second和third的版本。
Paste_Image.png

Git--版本控制(二)版本回退_第11张图片
Paste_Image.png
  • 对,你没有看错,我们回来了。

Git版本回退的速度为什么这么快?因为HEAD指针。

Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向I modified frist file:

Git--版本控制(二)版本回退_第12张图片
Paste_Image.png
  • 回退后:
Git--版本控制(二)版本回退_第13张图片
Paste_Image.png

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

Git--版本控制(二)版本回退_第14张图片
Paste_Image.png

你可能感兴趣的:(Git--版本控制(二)版本回退)