这是从今天开始使用git的第二篇,前一篇可以在我的博客中找到。这一篇主要写分支和如何多人协作同一个仓库。
fork一个仓库
fork一个仓库可以将仓库复制到自己的仓库下。
多人协作一个仓库的时候,我们通常都是每个人fork一个仓库,然后在这个fork的仓库中开发,然后再发请求合并自己的仓库到fork到源仓库中。
我在一个组织中创建了一个仓库:c4evth/git-train,供协作练习。
现在我从这个组织到仓库fork一份代码到自己的仓库中。
然后选择要fork到哪里
过了一会,就fork好了。
现在这个仓库就和我们自己的仓库一样,可以clone到本地,开发,推送。
推送更新到源仓库
把fork下来的仓库克隆下来,并添加一个index.js,然后推送到github。
然后在这个仓库页面中,点击new pullrequest,来创建一个拉取请求。
然后选择从哪个仓库到哪个分支,合并到哪个仓库到哪个分支。在下面可以看到本次的更新。
填写PR的标题和描述,creat,就将PR发出去了,然后源仓库的拥有者就收到提醒。
创建成功,下面按钮显示与base仓库没有冲突。
在仓库拥有者看到这条pr后,会对你的代码review,然后确定要不要合并进去。因为我是c4evth/git-train的拥有者,所以我就自己审核了。
通过之后,可以看到
表示已经合并进去。然后去源仓库看一下,也已经更新了
分支
分支,从意思上来理解就可以。比如现在代码是可以跑的,然后你想加个功能上去,就可以从现在这个节点,开一个分支,在这个分支上开发,这个分支和原来的分支是不冲突的。
我们来新建一个分支,在命令行中:
git checkout -b dev
这条命令新建了一个dev分支,并转到这个dev下。
然后我们对这个分支进行开发,我在这里编辑了index.js。然后推送上去,这时候土松和之前有一点不同:
在github中,切换到dev分支
可以看到,index.js更新了。
再切换到master,查看index.js却没有更新。
冲突
假设现在有多个人fork了,并在开发,你现在本地的代码好几天没开发,但是别人却在这几天发了好多个pr,源仓库也更新了。这时候,你已经落后好几个版本了,如何更新到这个版本跟上进度继续开发呢?
新建一个remote
在命令行中:
git remote add upstream 源仓库的地址
这样就新建了一个remote,名字叫upstream。
然后我们从这个upstream(上游),拉取代码:
假设我们要与上游的dev分支同步。
git pull upstream dev
现在上游的代码已经拉下来了,然后我们将它与本地合并:
git merge upstream/dev
这样就将上游的dev分支与当前分支合并了,然后再推送就不会出现你在没有跟上版本的情况下向源仓库推送更新的情况。
有时候合并代码会有冲突,需要手动编辑这些冲突,在编辑的时候就能看见,删除不要的代码就好。
总结
整个流程就是这个样子