zoukankan      html  css  js  c++  java
  • git教程学习笔记(2)

    git教程学习来自廖雪峰的官方网站

    1.版本回退

    修改readme.txt文件提交到Git版本库,例如:

    Git is a distributed version control system.
    Git is free software

    任意修改几个版本进行add和commit以后,考虑一下当前的版本已经更迭到几代了?

    在实际工作中,我们脑子里怎么可能记得一个几千行的文件每次都改了什么内容,不然要版本控制系统干什么。版本控制系统肯定有某个命令可以告诉我们历史记录,在Git中,我们用git log命令查看

    $ git log
    commit e82e6f6c8b90fbf95f23273e7c7a37973529d463 (HEAD -> master)
    Author: leox <leox520@163.com>
    Date:   Wed Sep 4 15:21:19 2019 +0800
    
        append HAHAHA
    
    commit cf418a19d4725b02680b08b83414cea9bb0c797b
    Author: leox <leox520@163.com>
    Date:   Wed Sep 4 15:18:46 2019 +0800
    
        append GPL
    
    commit 7f6805e527555bc4a2d153a6e85ec86a2661f2f2
    Author: leox <leox520@163.com>
    Date:   Wed Sep 4 14:52:31 2019 +0800
    
        添加了一个txt文件

    git log命令显示从最近到最远的提交日志,我们可以看到3次提交,最近的一次是append HAHAHA,上一次是add GPL,最早的一次是 添加了一个txt文件。

    如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline参数:

    $ git log --pretty=oneline
    e82e6f6c8b90fbf95f23273e7c7a37973529d463 (HEAD -> master) append HAHAHA
    cf418a19d4725b02680b08b83414cea9bb0c797b append GPL
    7f6805e527555bc4a2d153a6e85ec86a2661f2f2 添加了一个txt文件

    需要友情提示的是,你看到的一大串类似e82e6f6c8b...的是commit id(版本号),和SVN不一样,Git的commit id不是1,2,3……递增的数字,而是一个SHA1计算出来的一个非常大的数字,用十六进制表示,而且你看到的commit id和我的肯定不一样,以你自己的为准。为什么commit id需要用这么一大串数字表示呢?因为Git是分布式的版本控制系统,后面我们还要研究多人在同一个版本库里工作,如果大家都用1,2,3……作为版本号,那肯定就冲突了。

    好了,现在我们启动时光穿梭机,准备把readme.txt回退到上一个版本,也就是add GPL的那个版本,怎么做呢?

    首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交e82e6f6c8b...(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100

    现在,我们要把当前版本append HAHAHA回退到上一个版本add GPL,就可以使用git reset命令:

    $ git reset --hard HEAD^
    HEAD is now at cf418a1 append GPL

    然后现在去查看readme.txt文件,果然被还原了。

    还可以继续回退到上一个版本wrote a readme file,不过且慢,然我们用git log再看看现在版本库的状态:

    $ git log
    commit cf418a19d4725b02680b08b83414cea9bb0c797b (HEAD -> master)
    Author: leox <leox520@163.com>
    Date:   Wed Sep 4 15:18:46 2019 +0800
    
        append GPL
    
    commit 7f6805e527555bc4a2d153a6e85ec86a2661f2f2
    Author: leox <leox520@163.com>
    Date:   Wed Sep 4 14:52:31 2019 +0800
    
        添加了一个txt文件

    最新的那个版本append GPL已经看不到了!好比你从21世纪坐时光穿梭机来到了19世纪,想再回去已经回不去了,肿么办?

    办法其实还是有的,只要上面的命令行窗口还没有被关掉,你就可以顺着往上找啊找啊,找到那个append HAHAHAcommit id是e82e6f6c8b9...,于是就可以指定回到未来的某个版本:

    $ git reset --hard e82e6
    HEAD is now at e82e6f6 append HAHAHA

    然后再查看readme.txt文件,HAHAHA又回来了!!

    $ cat readme.txt
    Git is a distributed  version control system. sound HAHAHA.
    Git is free software distributed under the GPL.

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

    ┌────┐
    │ HEAD  │
    └────┘
       │
       └──> ○ append GPL
            │
            ○ add distributed
            │
            ○ wrote a readme file

    改为指向add distributed

    ┌────┐
    │  HEAD │
    └────┘
       │
       │    ○ append GPL
       │    │
       └──> ○ add distributed
            │
            ○ wrote a readme file

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

    现在,你回退到了某个版本,关掉了电脑,第二天早上就后悔了,想恢复到新版本怎么办?找不到新版本的commit id怎么办?

    在Git中,总是有后悔药可以吃的。当你用$ git reset --hard HEAD^回退到add HAHAHA版本时,再想恢复到append GPL,就必须找到append GPL的commit id。Git提供了一个命令git reflog用来记录你的每一次命令:

    $ git reflog
    e82e6f6 (HEAD -> master) HEAD@{0}: reset: moving to e82e6
    cf418a1 HEAD@{1}: reset: moving to HEAD^
    e82e6f6 (HEAD -> master) HEAD@{2}: commit: append HAHAHA
    cf418a1 HEAD@{3}: commit: append GPL
    7f6805e HEAD@{4}: commit (initial): 添加了一个txt文件

    终于舒了口气,从输出可知,append GPL的commit id是cf418a1,现在,你又可以乘坐时光机回到未来了。

  • 相关阅读:
    Android 实现书籍翻页效果番外篇之光影效果
    ViewPager + Fragment 替换 TabActivity
    蓝绿简约可重复使用的简约Tab选项卡
    黑色漂亮的DIV+CSS导航菜单代码
    JavaScript+Css打造三种简洁的Tab网页选项卡
    来自中国站长站的导航菜单代码【强烈推荐】
    蓝紫色背景的漂亮CSS菜单代码
    仿Vista风格按钮菜单代码(纯CSS打造)
    仿Vista金属感导航菜单代码
    精致纯CSS打造绿色漂亮导航栏
  • 原文地址:https://www.cnblogs.com/LeoXnote/p/11459690.html
Copyright © 2011-2022 走看看