美文网首页
Git----版本穿梭

Git----版本穿梭

作者: HCherisher | 来源:发表于2017-06-24 21:36 被阅读0次

    本篇博客讲解的git命令

    $ git log                    //查看每次提交日志
    $ git reset --hard HEAD^     //回退到上一个版本
    $ git reflog                 //查看以前的所有历史记录
    $ git cheakout -- filename   //撤销修改工作区里的变化
    $ git rm filename            //确定工作区的删除操作
    $ git reset HEAD filename    //撤销缓存区的变化
    

    在讲解命令之前先介绍一下版本库的区域划分

    git缓存区.png
    左边的工作区就是我们进行操作的地方,就是.git文件夹所在的目录,工作区里有一个隐藏的文件夹.git就是我们的版本库,里面有很多的内容,以后有时间可以具体分析一下,里面最重要的一个区域就是stage(或者叫index)缓存区
    前面讲了我们把文件往Git版本库里添加的时候,是分两步执行的:
    第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
    第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
    因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。
    你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。
    同时我们需要理解master指针指向master分支的最新版本节点,HEAD指针指向mater表示当前分支mater的版本最新节点,后面我们会讲到切换分支时HEAD指针会移动。
    $ git log
    commit d3dd4b32a146c0046e4a718151ab9525b896b92c (HEAD -> master)
    Author: ChuanMac <845825101@qq.com>
    Date:   Sat Jun 24 20:02:40 2017 +0800
        第二次提交
    
    commit 32cc9a766fcc4665644a2b883a4e302ace2fe50b
    Author: ChuanMac <845825101@qq.com>
    Date:   Sat Jun 24 20:01:51 2017 +0800
        第一次提交
    

    我们之前进行过两次提交,第一次内容为111111,第二次加上了22222,git log为我们显示了两次的提交信息,d3dd4b32a146c0046e4a718151ab9525b896b92c这就是我们提交的版本号,我们可以通过它进行回滚,同时我们还可以通过这个命令看到提交日期作者邮箱以及提交信息,也就是我们git commit -m后面跟着的信息。

    $ head aaa.txt
    test git
    1111111
    2222222
    $ git reset --hard HEAD^
    HEAD is now at 32cc9a7 第一次提交
    $ head aaa.txt
    test git
    1111111
    

    head aaa.txt查看aaa.txt文件的前几行,当前有三行记录,我们使用命令git reset --hard HEAD^表示回退到HEAD当前版本的前一个版本,一个表示回退一个版本,HEAD^表示上上个版本,HEAD~100表示上100个版本,执行了reset命令之后我们再查看aaa.txt发现果然回退到了上一个版本,内容少了一行。

    mac-pro:testgit cherish$ git log
    commit 32cc9a766fcc4665644a2b883a4e302ace2fe50b (HEAD -> master)
    Author: ChuanMac <845825101@qq.com>
    Date:   Sat Jun 24 20:01:51 2017 +0800
        第一次提交
    
    $ git reflog
    32cc9a7 (HEAD -> master) HEAD@{0}: reset: moving to HEAD^
    d3dd4b3 HEAD@{1}: reset: moving to d3dd4b3
    32cc9a7 (HEAD -> master) HEAD@{2}: reset: moving to HEAD^
    d3dd4b3 HEAD@{3}: reset: moving to d3dd4b3
    32cc9a7 (HEAD -> master) HEAD@{4}: reset: moving to HEAD^
    d3dd4b3 HEAD@{5}: reset: moving to d3dd4b32a146c004
    32cc9a7 (HEAD -> master) HEAD@{6}: reset: moving to HEAD^
    d3dd4b3 HEAD@{7}: reset: moving to d3dd4b3
    32cc9a7 (HEAD -> master) HEAD@{8}: reset: moving to 32cc9a7
    32cc9a7 (HEAD -> master) HEAD@{9}: reset: moving to HEAD^
    d3dd4b3 HEAD@{10}: commit: 第二次提交
    32cc9a7 (HEAD -> master) HEAD@{11}: commit (initial): 第一次提交
    
    $ git reset --hard d3dd4b3
    HEAD is now at d3dd4b3 第二次提交
    
    $ head aaa.txt
    test git
    1111111
    2222222
    
    1. 这个时候再执行git log发现当前提交版本只有一条信息了,因为我们在执行reset的时候,mater带着head指针由当前最新版本节点指向了上一个版本节点,在遍历版本节点时,就不会再遍历之前的最新版本节点了。
    2. 这个时候我们如果回滚错了,怎么再变回去了,我们需要通过提交版本号,把master指针移动到那个版本的节点处,通过git reflog可以查看之前的每一次版本指针移动记录,我们找到我们需要的版本节点对应的号码,用 git reset --hard number来知道特定版本
    3. 这个时候我们再查看aaa.txt时就发现确实又变回来了
    操作:
    testgit.gif
    我们对工作区文件操作错了,导致和缓存区不一致时,我们可以采用git checkout -- filename放弃对工作区域的操作
    $ ls -a
    .       ..      .DS_Store   .git        aaa.txt
    $ rm aaa.txt
    $ ls -a
    .       ..      .DS_Store   .git
    $ git status
    On branch master
    Changes not staged for commit:
      (use "git add/rm <file>..." to update what will be committed)
      (use "git checkout -- <file>..." to discard changes in working directory)
    
        deleted:    aaa.txt
    
    no changes added to commit (use "git add" and/or "git commit -a")
    $ git checkout -- aaa.txt
    $ ls -a
    .       ..      .DS_Store   .git        aaa.txt
    
    1. 首先我们ls查看到目录下有aaa.txt, rm aaa.txt删除了文件后查看目录下没了
    2. 我们git status之后有两个操作,一个是确实要删除,我们需要先git rm aaa.txt然后再git commit,还有就是我们删错了,需要还原就用git checkout -- filename执行这个命令后,我们发现文件又出来了。
    checkout.gif
    最后还有一个命令就是清空缓存区git reset HEAD filename,比如我们git add后发现我们添加到缓存区的东西不妥,这个时候就可以使用这个命令将缓存区给清空

    相关文章

      网友评论

          本文标题:Git----版本穿梭

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