Git入门
环境准备
想要学习git,就必须先有个git环境.最有名的当然就是Github.不过访问速度时好时坏,所以建议用一个国内的git仓库.我推荐的是oschina: http://git.oschina.net/ 使用方式跟Github几乎一样,速度快了很多.申请好之后,导入ssh公钥就可以开始测试了.btw:他家的maven仓库的速度也不错.http://maven.oschina.net/home.html,(用阿里云的maven仓库代替吧)oschina的已经关闭了.
配置
1 | git config --global user.name "charles" |
常用命令:
1 | #查看配置,一般在~/.gitconfig |
使用
基本的使用命令,很多地方都有,这边就不做介绍了.下面我通过一个测试项目来模拟一个真实的开发过程.
首先在git仓库新建一个项目git-test
.
第一步就是先导出到本地.命令很简单,就是git clone,可以选择http和ssh两种方式,我使用的ssh.由于之前已经把公钥导入到git仓库中.所以后续的操作都不用再输入用户名和密码了.git clone git@git.oschina.net:ichengchao/git-test.git
有个比较特殊的文件需要简单介绍一下.gitignore
,该文件用于忽略一些文件或者文件夹,这个文件或者文件夹就不会提交到仓库中.简单的语法如下:
1 | #忽略所有.class结尾的文件 |
先新建一个文件master.txt,再推送仓库,当做是初始化master分支
1 | echo "master content">>master.txt |
现在需要开发新功能叫featureA,那就需要新建一个分支.
1 | #新建并切换到分支featureA |
到此,featureA的功能已经全部开发完成,等待测试完成后合并到master分支并发布.这时线上发现了一个bug,需要紧急修复.暂且把这个修复叫做hotfixA,同样的,这种操作也不能直接在master分支上操作.需要新建一个分支:hotfixA,但这个分支不用提交到远程仓库,直接本地测试完后就可以合并到master分支中.操作如下:
1 | #先切换回master分支 |
hotfixA开发完成,假设测试也已经通过,需要合并到master分支中
1 | #切换回master分支 |
hotfixA上线后,featureA的功能也已经通过测试,需要合并到master,操作如下:
1 | git merge featureA |
手工解决冲突的方式有很多种,最简单的就是直接编辑冲突的文件.修改完成后重新执行git add fileName
就可以了.不过如果文件内容冲突的很厉害,而且文件内容比较多的情况下,这种合并方式的难度就比较大了.这里推荐使用git mergetool
命令.我用的是SourceGear | DiffMerge工具.下载mac版本的installer方式安装.同时指定git config --global merge.tool diffmerge
即可.不管使用那种方式merge,完成后执行如下操作:
1 | git add * |
这样master分支就可以发布了,一般我们发布完成后会打一个release的tag
1 | #打一个release tag并推送到仓库 |
下图为整个过程:
至此,一个完整的开发流程已经模拟完.基本的git使用应该没有问题了.
作业题: 把上面的git merge
操作用git rebase
替换.
终于可以安心的睡觉去了,刚刚躺下就接到了电话说featureA线上有缺陷,需要马上回滚.
1 | git log |
搞定.当然也可以选择使用git revert
来回滚,当使用git revert
时,原来的featureA分支将不能再次合并.更多关于git reset和git revert的区别参见该文章
使用技巧
好用的命令
1 | #格式化查看log |
默认会使用more或者less作为输出的分页器, 有时候用起来不是很方便, 可以把调整一下,类似aws cli也有这样的问题
1 | # git 的关闭方式 |