借鉴:《看日记学git》系列,简单记录在此,方便以后查看。

1. 获取git命令相关帮助信息
   获取帮助可以使用类似man git-****的命令格式:
   想获得关于commit命令的帮助,则man git-commit
   想获得关于pull命令的帮助,则man git-pull
   想获得关于merge命令的帮助,则man git-merge
   .....

2. 任何人在使用git之前,都要提交简单的个人信息,以便git区分不同的提交者身份。
   #git config -global user.name "your name"
   #git config -global user.email "[email protected]"

3. 想新开启一个项目,应该先建立一个目录,例如名为myproject,然后所有的项目开发内容都在此目录下进行。
   #cd  myproject
   #git  init
   #git  add  .
   #git  commit   //这个步骤会自动进入编辑状态,要求提交者输入有关本次提交的“开发信息”。
 
4. 如果改进了项目源代码,并且到了开发者认为“应该再次记录开发信息”的时候,则提交修改程序。
   #git commit -a     //相当于git add .  ;  git commit;  
   但是git commit -a 无法把新增文件或文件夹加入进来,如果新增了文件或文件夹则必须要先执行git add . ,再执行git commit。

5. 想检查到目前为止对源码做了哪些修改(相对于本次工作刚开始之时):
   #git diff                // 这个命令只在git add 之前有效,如果已经add了,此命令输出为空。
  #git diff  -cached   // 这个命令在git add之后,git commit之前有效。
  #git status            // 这个命令在git commit之前有效,表示都有哪些文件发生了改动

6. 想查看自项目开启到现在的所有开发日志
  #git log
  #git log -p  //会输出详细的日志内容,包括了每次都做了哪些源码的修改

7. 开启一个实验分支(experimental),如果分支开发成功则合并到主分支(master),否则放弃该实验分支。
  #git branch experimental    //创建一个实验分支,名称叫experimental 
  #git branch  //显示当前都有哪些分支,其中标注*为当前所在分支
  #git checkout  experimental    //转移到experimental分支

  如果分支开发成功:
  #git commit -a   //在experimental分支改进完代码之后用commit在此分支中进行提交
  #git checkout master  //转移回主分支
  #git merge experimental  //经证实分支开发成功,将experimental分支合并到主分支
  #git commit -a   //彻底完成此次合并,即提交master分支
  #git branch -d experimental  //因为experimental分支已提交,所以可安全删除此分支
  
  如果分支开发失败:
  #git checkout master
  #git branch -D experimental  //由于分支证明失败,因此使用-D来放弃并删除该分支
 
8. 随时查看图形化分支信息。
  #gitk    

9. 当合作伙伴bob希望改进我(rocrocket)的工作成果,则:
  bob$ git clone /home/rocrocket/project  myrepo   //此命令用于克隆额的工作到bob的myrepo目录下。
  ----注意该命令有可能会因为/home/rocrocket的目录权限问题而被拒绝,解决方法是chmod o+rx  /home/rocrocket。
 
  bob$ git commit -a   //bob提交自己的改进成果到自己的git仓库中,并口头告知我(rocrocket)他已经完成了工作。

  我如果非常非常信任bob的开发能力:
  $cd  /home/rocrocket/project
  $git pull /home/bob/myrepo  //pull命令的意思是从远端git仓库中取出(git-fetch)修改的代码,然后合并(git=merge)
                                                到我(rocrocket)的项目中去。
   --- 技巧:"git pull . "命令和git merge的功能一样,完全可以用git pull . 来代替git merge。
             git pull命令有可能会因为/home/bob的目录权限问题而被拒绝,解决方法是chmod o+rx /home/bob。

   如果我不是很信任bob的开发能力:
   $cd /home/rocrocket/project
   $git fetch /home/bob/myrepo  master:bobworks  //此命令意思是提取出bob修改的代码内容,然后放到我(rocrocket)工作
                                                   目录下的bobworks分支中。之所以放到分支中,就是可以仔细看看bob的
                                                   开发成果,满意再merge到master中,不满意则可以git branch -D掉。
   $git whatchanged -p master..bobworks  //用来查看bob都做了什么
   $git checkout master   //切换到master主分支
   $git pull  .  bobworks  //满意合并bobworks分支到主分支
   $git branch -D bobworks  //不满意则可放弃bobworks这个分支

   如果过了几天,bob想继续帮我开发,他需要先同步一下我这几天的工作成果,只要在当初clone的myrepo下执行git pull即可:
   $git pull   //不用加任何参数,因为当初clone的时候,git已经记住了我(rocrocket)的工作目录。

     
10. 历史记录查询
     (1)git的历史记录是由一些列相关联的"commit"所组成的。每一次"commit"都会有一个唯一的名称。
        [root@localhost module_at_3.0(select)]# git log
         commit 934cbcecc485564f271d0408d97312d047e9fe6f
         Author: root <[email protected]>
         Date:   Tue Jul 21 16:01:24 2015 +0800
         Add module_at file.
         commit 680660b879acd8c17d207e73fd9ad77dfc245f63
         Author: root <[email protected]>
         Date:   Tue Jul 21 15:58:33 2015 +0800
         modify: 2G get longitude and latitude select time.
  
    (2)使用git show加上上述的commit名称来显示更详细的commit信息:
        $git show 934cbcecc485564f271d0408d97312d047e9fe6f
        $git show 934cb    //可以用一个最短的且唯一的”名称前几个字符“替代,只要能区别于其他名称即可
         
        $git show master
        $git show experimental  //可以用git show加分支名称显示分支信息

        $git show HEAD   //显示最近一次commit的信息
         每次commit都会有”parent commit”,可以使用^表示parent:        
        $ git show HEAD^       //查看HEAD的父母的信息
        $ git show HEAD^^     //查看HEAD的父母的父母的信息
        $ git show HEAD~4     //查看HEAD上溯4代的信息
  
        ---注意:git-merge是会产生双父母的,这种情况使用:
        $ git show HEAD^1       //查看HEAD的第一个父母的信息
         $ git show HEAD^2      //查看HEAD的第二个父母的信息    
     
    (3) 使用tag可以给复杂的名称起个别名:
        $ git tag  v3 934cb      //以后可以用v3来代替复杂的名称(934cb...)
        $ git show v3
        $ git branch stable v3   //建立一个基于v3的分支

     (4)可以使用git grep搜索
        $git grep "print" v3      //在v3中搜索所有包含print的行
        $git grep "print"          //在所有的历史记录中搜索包含print的行
  
     (5)定位具体的历史记录
        $git log v3..v7   //显示v3之后到v7的所有历史记录
        $git log v3..      //显示所有v3之后的历史记录
        ----注意:<since>..<until>中任何一个被省略都将被默认设置为HEAD。
                       所以如果使用..<until>的话,git log在大部分情况下会输出空的。
         $git log -since="2 weeks ago"     //显示2周前到现在的所有记录。具体语法可查询git-ref-parse命令的帮助文件。
        $git log stable..experimental       //显示在experimental分支但不在stable分支中的历史记录
        $git log experimental..stable       //显示在stable分支但不在experimental分支中的历史记录     
 
     (6) gitk也可以定位具体的历史记录:
        $ gitk -since="2 weeks ago"  drivers     //将在GUI中显示自两周前到目前为止位于drivers目录下的分支记录信息
09-15 02:39