Oliwans'blog

不会写影评的摄影师不是好的FED

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服务器方面进行总结。

Oliwans

个人博客技术、观点、见解分享者;我会在这里分享工作中的问题;兴趣方面的观点;生活中的感悟。

Proudly published with Hexo