• 看日记学git--笔记


    该书112页,一共30篇日记。

    今天把这本书看完了,说一下感受,

    不推荐阅读该书。

    该书是一个学生在2009年写的读书笔记,和现在的git有一定出入。

    该书的优点:内容简洁,有demo讲解。

    缺点:

    1、原理的讲解并不清晰,特别是各种常用命令的原理基本没讲。

    2、有几个比较重要的命令没讲,比如rebase、commit合并。

    3、有几个重要的命令没说明白,比如checkout

    4、推荐了一些目前不推荐使用的方法,比如merge、pull .

    git add .这个命令要求git给我目前的这个项目制作一个快照snapshot

    (快照只是登记留名,快照不等于记录在案,git管快照叫做索引index)。快照一般会暂时存储在一个临时存储区域中。

    git commit用于将快照里登记的内容永久写入git仓库中,也就是开发者已经想好了要提交自己的开发成果了。

    git diff 来查看不同

    bogon:aha lakeslove$ git diff
    diff --git a/sort/indexSort.cpp b/sort/indexSort.cpp
    index 9e93882..2308c33 100644
    --- a/sort/indexSort.cpp
    +++ b/sort/indexSort.cpp
    @@ -11,6 +11,6 @@ int main()
             for(j=1;j<=a[i];j++)
                 printf("%d ",i);
         }
    -    //getchar();getchar();
    +    getchar();getchar();//这个时刻可以暂停来查看变量
         return 0;
     }
     No newline at end of file

    git status //来查看当前状态(未执行add)

    bogon:aha lakeslove$ git status
    On branch master
    Changes not staged for commit:
      (use "git add <file>..." to update what will be committed)
      (use "git checkout -- <file>..." to discard changes in working directory)
    
        modified:   sort/indexSort.cpp
    
    no changes added to commit (use "git add" and/or "git commit -a")

    git add sort/indexSort.cpp  

    git status //再查看当前状态

    bogon:aha lakeslove$ git status
    On branch master
    Changes to be committed:
      (use "git reset HEAD <file>..." to unstage)
    
        modified:   sort/indexSort.cpp
    
    bogon:aha lakeslove$ git commit -m '添加getchar()'

     

    git commit -m '添加getchar()'   //提交变更

    git log  //查看操作记录,是按照时间倒序排列的

    bogon:aha lakeslove$ git log
    commit e5a56984064fc31c2050d0633ab300a4e5b6d6a3
    Author: liuxin <liuxin@i-counting.cn>
    Date:   Thu May 28 00:17:58 2020 +0800
    
        添加getchar()
    
    commit ddac1bac161e778029df15de9661d17c04e38d47
    Author: liuxin <liuxin@i-counting.cn>
    Date:   Wed May 27 23:25:13 2020 +0800
    
        啊哈!算法 的demo

    如果修改了项目代码,先git add你修改过的文件,再git diff并git status查看确认,然后git commit提交,然后输入

    你的开发日志,最后git log再次确认。

    现在教给你一个偷懒方法,那就是git commit -a,这个命令可以直接提交所有修改,省去了你git add和git diff和git

    commit的工序,可谓一条龙服务。

    但是,此处有一点应该注意,那就是git commit -a无法把新增文件或文件夹加入进来,所以,如果你新增了文件或文

    件夹,那么就要老老实实的先git add .,再git commit喽。

    git 命令显示版本树   git log --oneline --graph --decorate --all

    git 命令显示版本树简化版 git log --graph 

    --oneline 是每次提交信息显示在一行中,但是会隐藏时间等信息

    gitk 一个自带的git界面化管理工具,感觉不如souretree或idea里的git工具好用。

    git branch -d xxx 是删除xxx分支,

    在这里使用的是小写的-d,表示“在分支已经合并到主干后删除分支”。但是如果某分支没有做任何修改的话,即使没有合并到主分支,也可以用-d删除

    如果使用大写的-D的话,则表示“不论如何都删除分支”,测试结果如下:

    bogon:aha lakeslove$ git branch -d test3
    error: The branch 'test3' is not fully merged.
    If you are sure you want to delete it, run 'git branch -D test3'.
    bogon:aha lakeslove$ git branch -D test3
    Deleted branch test3 (was c60a0e1).

    pull命令完成了两个动作,首先从远端分支获取diff信息,第二个动作就是将改变合并到本地分支中。

    #git diff //这个命令只在git add之前使用有效。如果已经add了,那么此命令输出为空

    #git diff --cached //这个命令在git add之后在git commit之前有效。

    #git status //这个命令在git commit之前有效,表示都有哪些文件发生了改动

    $ git pull /home/bob/myrepo //pull命令的意思是从远端git仓库中取出(git-fetch)修改的代码,然后合并(git-merge)到我(rocrocket)的项目中去。

    读者要记住一个小技巧,那就是“git pull .”命令,它和git merge的功能是一样的,以后完全可以用git pull .来代替git merge哦

    $ git fetch /home/bob/myrepo master:bobworks //此命令意思是提取出bob修改的代码内容,然后放到我(rocrocket)工作目录下的bobworks分支中

    $git whatchanged -p master..bobworks //用来查看bob都做了什么,也可以用git diff branch1 branch2,也可以用git log --left-right branch1...branch2

    $git checkout master //切换到master分区

    $git pull . bobworks //如果我检查了bob的工作后很满意,就可以用pull来将bobworks分支合并到我的项目中了

    $git branch -D bobworks //如果我检查了bob的工作后很不满意,就可以用-D来放弃这个分支就可以了

    如果git pull 出现来冲突,那么先解决冲突,再git add . ,之后git commit -m  '解决冲突'

    历史记录查询

    git log
    [rocrocket@wupengchong project]$ git log
    commit 5b888402aadd3cd41b3fe8c84a8658da07893b20
    Author: rocrocket <wupengchong@gmail.com>
    Date: Wed Sep 24 13:16:46 2008 +0800
    after pull from rocrocket
    Hello!!!!!

    我们可以使用git show再加上述的commit名称来显式更详细的commit信息:

    bogon:aha lakeslove$ git show 5f67d8f66265fb66b5b54ab2698057da1efe1ba7
    commit 5f67d8f66265fb66b5b54ab2698057da1efe1ba7
    Merge: 4e56ef3 f498eeb
    Author: liuxin <liuxin@i-counting.cn>
    Date:   Thu May 28 16:31:04 2020 +0800
    
        解决pull引起的冲突
    
    diff --cc sort/indexSort.cpp
    index f16ae20,f40170e..ec31dd7
    --- a/sort/indexSort.cpp
    +++ b/sort/indexSort.cpp
    @@@ -14,4 -16,4 +16,4 @@@ int main(
          }
          getchar();getchar();//这个时刻可以暂停来查看变量
          return 0;
    --}
    ++}

    使用git show加分支名称,亦可以显示分支信息:

    使用HEAD字段可以代表当前分支的头(也就是最近一次commit):

    每一次commit都会有”parent commit”,可以使用^表示parent:
    [rocrocket@wupengchong project]$git show HEAD^ //查看HEAD的父母的信息
    [rocrocket@wupengchong project]$git show HEAD^^ //查看HEAD的父母的父母的信息
    [rocrocket@wupengchong project]$git show HEAD~4 //查看HEAD上溯4代的信息
    要注意的是git-merge是会产生双父母的,这种情况这样处理:
    [rocrocket@wupengchong project]$git show HEAD^1 //查看HEAD的第一个父母
    [rocrocket@wupengchong project]$git show HEAD^2 //查看HEAD的第二个父母

    git branch stable V3 //建立一个基于V3的分支

    可以用git grep帮助我们搜索:

    [rocrocket@wupengchong project]$ git grep “print” V3 //在V3中搜索所有的包含print的行

    [rocrocket@wupengchong project]$ git grep “print” //在所有的历史记录中搜索包含print的行

    [rocrocket@wupengchong project]$ git tag V3 5b888 //以后可以用V3来代替复杂的名称(5b888…)

    [rocrocket@wupengchong project]$ git show V3

    [rocrocket@wupengchong project]$ git branch stable V3 //建立一个基于V3的分支

    git log V3..V7 //显示V3之后直至V7的所有历史记录

    [rocrocket@wupengchong project]$ git log stable..experimental //将显示在experimental分支但不在stable分支的历史记录

    [rocrocket@wupengchong project]$ git log experimental..stable //将显示在stable分支但不在experimental分支的历史记录

    每次add . 都会在.git/objects目录中添加新的文件,同时把index文件的内容改为新添加的目录。

    git 的几个查看文件的命令

    git ls-files --stage //查看index

    git cat-file -t xxxx  //查看文件类型

    git cat-file commit xxxx //查看commit类型文件

    git ls-tree xxxx //查看tree类型文件

    git cat-file blob xxx //查看blob类型文件

    git diff 有内容,git add . 之后,git diff 就没有内容了,但是git diff HEAD 依然有内容,说明:

    git diff不是在和HEAD比,而是和另外一个“神秘”内容在比,而这个“神秘”内容就是“索引文件”!

    git diff //对比的是当前文件和index中指向的文件,index中指向的文件是add后的文件。

    git diff HEAD //对比的是当前文件和HEAD指向的文件,也就是最近一次commit的代码

    git diff --cached //对比的是index中指向的文件和HEAD指向的文件,也就是最近一次commit的代码

    git维护的代码分成三部分,“当前工作目录”<->“index file”<->git仓库。

    git add会将“当前工作目录”的改变写到“index file”;git commit会将index file中的改变写到git仓库;“commit -a”则

    会直接将“当前工作目录”的改动同时写到“index file”和“git仓库”。

    将 Current working directory 记为 (1)
    将 Index file 记为 (2)
    将 Git repository 记为 (3)
    他们之间的提交层次关系是 (1) -> (2) -> (3)
    git add完成的是(1) -> (2)
    git commit完成的是(2) -> (3)
    git commit -a两者的直接结合
    从时间上看,可以认为(1)是最新的代码,(2)比较旧,(3)更旧
    按时间排序就是 (1) <- (2) <- (3)
    git diff得到的是从(2)到(1)的变化
    git diff –cached得到的是从(3)到(2)的变化
    git diff HEAD得到的是从(3)到(1)的变化
    git reset head 表示把indexfile中内容替换为HEAD中的内容

    上面两行黑体字中的Changes to be committed表示在index和commit的区别状况,而Changed but not updated表示当前目录和index的区别状况。

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    HVR数据复制软件部署之(一)--HUB端部署
    LeetCode 169:Majority Element
    [LeetCode][Java] Trapping Rain Water
    跨平台C、C++代码注意的事项
    Delphi通过查找字符定位TADOQuery数据的位置
    ADOquery属性中cursortype,LockType属性
    delphi ADOQuery 开启本地缓存
    如何判断一个事务是否已开始?
    SQL Server 取日期时间部分
    delphi中怎么获取服务器的时间
  • 原文地址:https://www.cnblogs.com/lakeslove/p/12984246.html
Copyright © 2020-2023  润新知