参考:https://github.com/SYSUMonkeyEye/MonkeyEye-FE
每个仓库一般仓库有2个分支,master和dev。主要在 dev 分支上进行开发和测试,功能完善之后再合并到master。
├─master
└─dev
1 准备工作
在 github 上 fork 仓库到你自己的 github,将你 fork 之后的远程仓库克隆到本地,并在你的本地仓库上添加上游仓库,即源仓库。fork 一般是 fork 了仓库的 master 分支,所以可能还需要自己去切出 dev 分支然后拉取源仓库dev 分支上的内容。
git clone https://github.com/{你的github}/{仓库名称}
# 上游的源仓库地址只需添加一次
git remote add upstream https://github.com/sysu-swsad-team/{仓库名称.git}
# 切出dev分支并拉取源仓库dev分支上的内容
git checkout -b dev
git pull upstream dev
2.1 协作方式-1
要开发某个模块的时候,在你的本地仓库创建一个分支,例如 mydev。
git checkout -b mydev
切换之后你的本地仓库上就有3个分支了,如下所示。checkout 之后会自动切换到 mydev 分支。
├─master
├─dev
└─mydev
在 mydev 分支上进行开发和测试,完成相应的功能或者模块,完成之后再切回到 dev 分支将 mydev 的内容合并到 dev。
# mydev分支上提交你的更新
git add *
git commit -m "add something"
# 切换到dev分支
git checkout dev
由于在你开发过程中,我也可能在开发并且更新了仓库,为了避免冲突,在合并分支之前你还需要更新你本地仓库的 dev 分支。先在本地仓库上添加上游仓库 upstream,上游仓库即我的仓库,然后使用 pull 命令从上游仓库拉取更新。
# 拉取上游的源仓库dev分支上的更新
git pull upstream dev
更新完 dev 之后,将 mydev 分支合并到 dev 分支并提交到你自己的远程仓库。完成之后,mydev 分支就可以删除了,你也可以继续留着。
# 将mydev分支合并到dev,可能会有冲突需要自行解决
git merge mydev
# 推送到你自己的远程仓库,注意这里是push到origin dev,不是upstream dev
git push origin dev
# 删除mydev分支
git branch -d mydev
推送到自己的远程仓库后,就可以到 github 上面给我发 Pull Request 了,然后等待我合并你的代码。
2.2 协作方式-2
嫌上面太麻烦?你也可以直接在 fork 之后的的 dev 分支上面进行开发,然后在发送 PR 之前先从源仓库拉取更新。
# 提交你的代码
git add *
git commit -m "add something"
# 拉取上游的源仓库dev分支上的更新,可能会有冲突需要自行解决
git pull upstream dev
# 推送到你自己的远程仓库,注意这里是push到origin dev,不是upstream dev
git push origin dev
3 备注
所有拉取远程仓库的更新的操作请在本地仓库上使用命令行完成。
# 拉取上游的源仓库dev分支上的更新
git pull upstream dev
严禁通过其他做法拉取更新(例如在GitHub网站上通过网页操作进行更新然后在本地pull origin dev),以免造成不必要的合并冲突以及多余的commit。