zoukankan      html  css  js  c++  java
  • 2017-03-10<Git版本回退>

    1再次修改内容:Git is a distributed version control system.

           Git is free software distributed under the GPL.

    2提交:$ git add readme.txt$ git commit -m "append GPL"

    [master 3628164] append GPL

     1 file changed, 1 insertion(+), 1 deletion(-)

    不断修改然后不断提交修改到版本库中,现在版本库中存在三个版本:

    版本1:wrote a readme file

    Git is a version control system.

    Git is free software.

    版本2:add distributed

    Git is a distributed version control system.

    Git is free software.

    版本3:append GPL

    Git is a distributed version control system.

    Git is free software distributed under the GPL.

    如果想查看对过往文件过了哪些内容的修改 我们用git log命令查看过往记录

    $ git log

    commit 3628164fb26d48395383f8f31179f24e0882e1e0

    Author: Michael Liao <askxuefeng@gmail.com>

    Date:   Tue Aug 20 15:11:49 2013 +0800

     

        append GPL

     

    commit ea34578d5496d7dd233c827ed32a8cd576c5ee85

    Author: Michael Liao <askxuefeng@gmail.com>

    Date:   Tue Aug 20 14:53:12 2013 +0800

     

        add distributed

     

    commit cb926e7ea50ad11b8f9e909c05226233bf755030

    Author: Michael Liao <askxuefeng@gmail.com>

    Date:   Mon Aug 19 17:51:55 2013 +0800

     

        wrote a readme file

    版本回退

    阅读: 919855

    现在,你已经学会了修改文件,然后把修改提交到Git版本库,现在,再练习一次,修改readme.txt文件如下:

    Git is a distributed version control system.

    Git is free software distributed under the GPL.

    然后尝试提交:

    $ git add readme.txt$ git commit -m "append GPL"

    [master 3628164] append GPL

     1 file changed, 1 insertion(+), 1 deletion(-)

    像这样,你不断对文件进行修改,然后不断提交修改到版本库里,就好比玩RPG游戏时,每通过一关就会自动把游戏状态存盘,如果某一关没过去,你还可以选择读取前一关的状态。有些时候,在打Boss之前,你会手动存盘,以便万一打Boss失败了,可以从最近的地方重新开始。Git也是一样,每当你觉得文件修改到一定程度的时候,就可以“保存一个快照”,这个快照在Git中被称为commit。一旦你把文件改乱了,或者误删了文件,还可以从最近的一个commit恢复,然后继续工作,而不是把几个月的工作成果全部丢失。

    现在,我们回顾一下readme.txt文件一共有几个版本被提交到Git仓库里了:

    版本1:wrote a readme file

    Git is a version control system.

    Git is free software.

    版本2:add distributed

    Git is a distributed version control system.

    Git is free software.

    版本3:append GPL

    Git is a distributed version control system.

    Git is free software distributed under the GPL.

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

    $ git log

    commit 3628164fb26d48395383f8f31179f24e0882e1e0

    Author: Michael Liao <askxuefeng@gmail.com>

    Date:   Tue Aug 20 15:11:49 2013 +0800

     

        append GPL

     

    commit ea34578d5496d7dd233c827ed32a8cd576c5ee85

    Author: Michael Liao <askxuefeng@gmail.com>

    Date:   Tue Aug 20 14:53:12 2013 +0800

     

        add distributed

     

    commit cb926e7ea50ad11b8f9e909c05226233bf755030

    Author: Michael Liao <askxuefeng@gmail.com>

    Date:   Mon Aug 19 17:51:55 2013 +0800

     

        wrote a readme file

    git log命令显示从最近到最远的提交日志,我们可以看到3次提交,最近的一次是append GPL,上一次是add distributed,最早的一次是wrote a readme file

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

    $ git log --pretty=oneline3628164fb26d48395383f8f31179f24e0882e1e0 append GPL

    ea34578d5496d7dd233c827ed32a8cd576c5ee85 add distributed

    cb926e7ea50ad11b8f9e909c05226233bf755030 wrote a readme file

    这些数字为commit id版本号svn不一样,Git的commit id不是1,2,3……递增的数字 避免冲突

    准备把readme.txt回退到上一个版本在Git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100

    把当前版本“append GPL”回退到上一个版本“add distributed”,就可以使用git reset命令:

    $ git reset --hard HEAD^

    HEAD is now at ea34578 add distributed

    看看readme.txt的内容是不是版本add distributed

    $ cat readme.txt

    Git is a distributed version control system.

    Git is free software.

    如果再想回到上一个版本 通过版本号 返回到指定的版本 cat <文件名> 查看内容

    $ git reset --hard 3628164

    HEAD is now at 3628164 append GPL

    如果忘记版本号 可以通过git reflog  找寻你的每一次命令:

    $ git reflogea34578 HEAD@{0}: reset: moving to HEAD^

    3628164 HEAD@{1}: commit: append GPLea34578 HEAD@{2}: commit: add distributedcb926e7 HEAD@{3}: commit (initial): wrote a readme file

    小结:

    HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id

    穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。

    要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

  • 相关阅读:
    Compression algorithm (deflate)
    tcpip数据包编码解析(chunk and gzip)_space of Jialy_百度空间
    What's the difference between the "gzip" and "deflate" HTTP 1.1 encodings?
    gzip压缩算法: gzip 所使用压缩算法的基本原理
    Decompressing a GZip Stream with Zlib
    Frequently Asked Questions about zlib
    how to decompress gzip stream with zlib
    自己动手写web服务器四(web服务器是如何通过压缩数据,web服务器的gzip模块的实现)
    What's the difference between the "gzip" and "deflate" HTTP 1.1 encodings?
    C语言抓http gzip包并解压 失败 C/C++ ChinaUnix.net
  • 原文地址:https://www.cnblogs.com/livelihood/p/6528781.html
Copyright © 2011-2022 走看看