在进行项目开发时,都会用到版本控制工具,如svn、Git等,随着Git的发展,渐渐的被越来越多的人使用,甚至慢慢在取代svn的地位。下面将从Git仓库的创建、Git常用的基本命令、Git的分支管理、Git查看提交历史、Git 标签、Git 远程仓库来介绍Git的使用。当然下面所涉及的命令都是在Git bash中操作的,所有必须先安装Git,至于怎样安装Git,这里就不介绍了,网上有一大把安装教程。
Git 创建仓库
创建一个git仓库有如下几种方式:
- git init:初始化一个git仓库
- git clone:clone一个git仓库 下面对这几种方式进行详细介绍:
- git init
Git使用git init命令来初始化一个Git仓库,执行完git init命令后,会生成一个.git目录,该目录包含了资源数据,且只会在仓库的根目录生成。 如果用当前目录作为Git仓库,则只需要执行如下命令:
git init
执行结果如下:
执行该命令之后,就可以在当前目录下生成.init文件夹,并且会默认生成一个master分支。
如果要在指定的目录下生成仓库,则指令如下:
git init newDir
newDir为仓库的路径,执行完成之后,会在newDir目录下生成一个.git目录。具体的执行结果如下:
执行该命令之后,就可以在当前目录下生成newtest文件夹,并在改文件夹下生成.init文件夹。
- git clone
使用git clone命令可以从Git仓库拷贝项目,类似于SVN中的 svn checkout,命令格式为:
git clone <url> \[directory]
url为git仓库地址,directory为本地目录,比如,要克隆某个Git 代码仓库,可以用下面的命令:
git clone git://github.com/schacon/grit.git
执行完成之后会在当前目录下生成仓库,如果要指定目录下生成,则可以在后面加一个具体的位置路径,如:
git clone git://github.com/schacon/grit.git newgit
如下为clone一个仓库的执行结果:
git clone 时,可以用不同的协议,包括 ssh, git, https 等,其中最常用的是 ssh,因为速度较快,还可以配置公钥免输入密码,各种写法格式如下:
git clone <git@github.com>/schacon/grit.git --SSH协议
git clone git://github.com/schacon/grit.git --GIT协议
git clone <https://github.com/schacon/grit.git> --HTTPS协议
Git 基本指令的使用
下面介绍一下git中常用的几种命令:
- git config:配置信息
- git add:添加文件到缓存命令
- git status:查看文件的状态命令
- git diff:查看更新的详细信息命令
- git commit:提交命令
- git reset HEAD:取消缓存命令
- git rm:删除命令
- git mv:移动或重命名命令
Git的分支管理
几乎每种版本控制系统都支持分支管理,使用分支我们可以从主干中分离出来,然后继续开发,不影响主干。下面介绍一下Git中分支常用的命令:
- git branch:查看分支命令
- git branch (branchname):创建分支命令
- git checkout (branchname):切换分支命令
- git merge:合并分支命令
- git branch -d (branchname):删除分支命令
Git查看提交历史
在使用 Git 提交了若干更新之后,又或者克隆了某个项目,想回顾下提交历史,我们可以使用 git log 命令查看
下面介绍查看历史记录的几种选项:
- –oneline :查看历史记录的简洁版本
- –graph :查看历史中什么时候出现了分支、合并
- –reverse :逆向显示所有日志
- –author :查找指定用户的提交日志
- –since、–before、 --until、–after: 指定帅选日期
- –no-merges :选项以隐藏合并提交 我们可以用 –oneline 选项来查看历史记录的简洁版本:
我们还可以用 –graph 选项,查看历史中什么时候出现了分支、合并:
这样我们可以更清楚明了地看到何时工作分叉、又何时归并,也可以用 –reverse 参数来逆向显示所有日志:
如果只想查找指定用户的提交日志可以使用命令:git log --author , 例如,比方说我们要找 Git 源码中qtqt提交的部分:
如果你要指定日期,可以执行几个选项:–since 和 --before,但是你也可以用 --until 和 --after,–no-merges 选项以隐藏合并提交。
例如,如果我要看 Git 项目中八月一日前且在七月二十九日之后的所有提交,我可以执行这个:
多数情况下,了解每条提交与那个分支/标签关联是很有用的。–decorate 标记让git log展示所有指向每个提交引用(如分支,标签等),如: