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目录下的分支记录信息