git速成手册(二)
git进阶
上一章介绍了单人操作git的一般指令,但是都是在本地进行的,如何将自己的代码保存起来以便日后随时查看或提取呢?
想要存储代码,就得先有一个代码托管的免费平台,这个平台就是github,它是基于git口令的,可以说二者是完美结合的存在,而且项目是开源的话是永远免费的,有了github,妈妈再也不用担心我的代码了。
如果自己更新代码,然后向github上提交,上一章指令应该够用了,不过问题是没人会一直自己默默的写代码,一个项目无论大小,往往是一个技术团队协作完成,每个人都提交自己的代码上去,那么如何操作呢?提交代码遇到冲突如何解决呢?我们这一章大致的来说一下。
要使用github就需要让其与自己的电脑绑定,如果不绑定的话,谁都可以随便提交代码,那就乱套了,失去了存储代码的意义,绑定电脑就需要注册一个github账号,然后与自己电脑的ssh密钥绑定,每个电脑的ssh都是独一无二的,绑定好了以后就拥有了属于自己的代码托管平台,使用git提交前,需要先在github中创建自己的版本库,为了方便,暂时起名为learngit。(注册github账号,绑定ssh以及创建版本库的方法很简单,这里篇幅问题暂不赘述,想要了解的同学可在网上查找资料进行学习),如果这些准备工作都做好了,那么我们就可以以开始了,首先还是口令的介绍:
- 关联、克隆版本库
$git remote add origin git@github.com:Oliwans/learngit.git //将本地库与远程库关联
这个操作呢是用来关联远程库的,如果是自己创建的话,本地和远程的名字一样,需要remote一下,把它们关联在一起,这样才方便提交代码,oliwans是我的用户名,这里要替换成你自己的
$cd clone git@github.com:Oliwans/learngit.git //从远程clone版本库
如果想clone别人的项目怎么办呢?就用上述的口令,可以将自己/别人的版本库clone下来,想clone谁的,就把oliwans替换成谁的用户名,什么?想要知道clone在哪里了?还记得上一章的口令吗?$pwd
$git clone http://github.com/Oliwans/learngit.git //从远程clone版本库
这个和clone git@的效果是一样的,只不过采用的是http协议进行clone,这里推荐git@的clone方法,因为是git的原生方法,clone速度更快,更稳定
- 多人协作的分支创建、使用
$git branch dev //创建分支
创建一个分支dev
$git checkout dev //切换分支到dev
因为没有操作的话,系统的默认分支为master,使用checkout就切换到了dev分支
$git checkout -b dev //创建并切换到dev分支
此指令的效果是第一个和第二个结合使用的效果
$git branch //查看当前分支
此口令会显示当前的所有分支,包括master与已创建的分支,目前在哪个分支上,就在前面有一个*来标识
$git merge dev //合并dev分支到当前分支
合并分支口令,dev可以为任何已创建分支,即合并制定分支到当前分支
$git branch -d dev //删除分支dev
-d表示delete,即删除分支dev
$git log --graph --pretty=online abbrev-commit //查看分支图
使用此口令可以调出可视化分支图,便于观察自己所做过的修改
$git merge --no-ff -m"something" dev //非Fast-forward合并分支
合并分支分为两种,一种是ff合并,一种是非ff合并,非ff合并在分支图里可以看到修改细节,使版本演进更加明显
$git stash //保存当前分支
当有紧急任务,而手头工作又没做完的情况下,可以先用stash保存分支,支持保存多个分支
$git stash list //查看保存的代码列表
调出保存代码列表
$git stash pop //读取保存区存储的代码
在读取的同时删除stash里的存档
$git stash apply //读取保存区存储的代码
在读取的同时保存stash里的存档
$git stash apply/pop stash@{0} //读取对应保存区存储代码
当存储多个分支时,stash里会出现不同的stash代码头用来区分,这是用apply或pop读取相应的代码头就可以提取出来与之对应的代码段
$git stash drop //删除stash里的存储
drop与apply配合使用,apply并未删除,可用此命令进行删除,其组合效果相当于pop
$git branch -D dev //强力删除分支
当分支有修改,但并未合并,这时如果删除,系统会对你进行询问,想要删除就用D来执行强力删除
这里需要注意一下,在对分支进行合并时,有时会有冲突产生,就需要使用者在本地的编辑器中对冲突进行修改,然后再add,commit,当冲突产生时,编辑器会自动编程冲突模式,只要修改提交就好
- 多人协作时对远端的推送及更新
$git remote //查看远程库信息
一般默认为origin
$git remote -v //查看详细远程库信息
可以看到抓取和推送origin的地址,没有推送权限看不到push
$git push origin master //推送主分支内容到github
master可以替换任意你想提交的分支,前提是要有push的权利,如果推送到自己的分支上,要远程关联起来
$git checkout -b dev origin/dev //创建与远程相对应的dev分支到本地
如果从别人哪里clone版本库,想要参与推送到他的库里进行更新,就要建立一个与远程分支相对应的本地分支
$git pull //更新版本库
多人提交代码会有冲突,这时代表远程库中的要比你的代码库更新,需要pull更新一下再提交
$git branch --set-upstream dev origin/dev //指定本地分支与远程分支连接
pull成功后还提交不了有两种原因,当出现no tracking information字样的时候,证明本地分支没有与远程分支连接,需要用此命令来连接
这些是多人协作的常用口令,有的人喜欢先pull再push,无疑这是一个好习惯,也有人喜欢直接push,出现问题再pull,两者都可以,就看大家的心情了,当push出现问题是先pull,如果pull成功了还是push不了,出现no tracking information字样的时候,证明本地分支没有与远程分支连接,需要先连接,连接之后还是push不了,可能是有冲突,需要大家解决冲突再push,总之哪里出现了问题,我们就在哪里解决问题。
这一章可能没有之前好理解,因为涉及到了分支的创建,操作,与远程库的push等问题,笔者在学习的过程中也出现过问题,这就需要大家多实践,从实践中总结经验,多分析,多操作,相信一定会熟练的操作git的!下一章我们从标签以及git服务器方面进行总结。