美文网首页
Git--版本控制(二)版本回退

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

作者: Levi_Wan | 来源:发表于2016-12-14 21:50 被阅读2006次

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

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

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

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

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

    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 Paste_Image.png
    • 查看我们的文件夹,second和third文件都消失了。。。
    Paste_Image.png
    • 我们同样可以继续使用回到又上一个版本。
    Paste_Image.png
    • 此时,我们查看frist.txt,并没有modified的痕迹。
    Paste_Image.png

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

    • 首先我们通过git reflog(它记录了我们所执行过的所有命令)
    Paste_Image.png
    • 全部16进制数为我们的commit id,我们可以通过id来进行倒退。
    • 回到添加second和third的版本。
    Paste_Image.png
    Paste_Image.png
    • 对,你没有看错,我们回来了。

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

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

    Paste_Image.png
    • 回退后:
    Paste_Image.png

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

    Paste_Image.png

    相关文章

      网友评论

          本文标题:Git--版本控制(二)版本回退

          本文链接:https://www.haomeiwen.com/subject/iphwmttx.html