fork
首先,多人协作的情况,我们通常会 fork团队项目主仓库到自己的托管空间下,然后 Clone 到本地进行开发,假设团队项目的托管地址为:
此时主仓库项目下的固定分支两个,分别是 master,develop。
Clone 到本地:
git clone git@github.com:fe/github-flow.git
假设上面主仓库 fork 之后的项目地址为:
Fork 出来的仓库完全属于你自己,你可以任意修改该仓库的代码及配置,但是除非你向项目主仓库提交 pull request,并且被接受通过,你才可以将你fork 仓库修改的代码合并到主仓库,否则不会对主仓库产生任何影响。
此时可以在控制台输入 git remote -v 命令查看当前远端仓库的地址,输出如下:
origin git@github.com:xxx/github-flow.git (fetch)
origin git@github.com:xxx/github-flow.git (push)
可以看出该地址的远端(origin)为刚刚 fork 到自己的托管空间下项目地址。
接下来我们可以设置一个名字为 upstream 的上游地址,也就是我们项目主仓库的地址
在命令行执行:
git remote add upstream git@github.com:fe/github-flow.git——
添加一个别名为upstream(上游)的地址,指向之前 fork 的原项目仓库地址。
再次执行 git remote -v 控制台输出如下:
origin git@github.com:xxx/github-flow.git (fetch)
origin git@github.com:xxx/github-flow.git (push)
upstream git@github.com:fe/github-flow.git (fetch)
upstream git@github.com:fe/github-flow.git (push)
设置上游地址的目的是当我们通过 pull request 的形式提到主仓库之后,本地仓库需要同步主仓库的代码,并及时更新到 origin(远端)仓库,保证自己托管空间下本地和远端仓库的代码都是最新的。
之后运行下面几条命令,就可以保持本地仓库与上游(upstream)仓库同步了
git fetch upstream
git checkout master
git merge upstream/master
接下来就是本地仓库推送到远端(origin)仓库:
git push origin master
这个时候我们可以在本地进行开发了,通常我们规定:
开发新功能要从 develop 分支上新建一个 feat/[name-desc] 临时分支
bug 修复 从 master 分支新建一个 hotfix/[name-desc] 临时分支
对于Github flow 流程中,master 分支包含稳定的、发布到生产的代码,develop 分支包含迭代最新的code review 通过并自动化测试通过的代码。
这里需要注意:不允许任何开发人员把未经测试或者没有 Code review通过的代码直接提交到 master、develop 分支上去。
对于多人开发,feat/[name-desc]、hotfix/[name-desc] 属于临时开发分支,开发完成且测试通过且Code review 通过之后需合并到 develop、master 分支。当需要代码部署到生产环境时,将 develop 分支的代码合并到 master,再将 master 的代码部署到生产环境。
新建feature 功能分支
当开放人员在进行项目功能迭代开发时,首先要基于develop 分支,新建一个分支出来:
git checkout -b feat/feedback develop
之后我们在 feat/feedback 分支进行 A 功能迭代,提交代码到本地仓库。
当我们功能开发完成之后,若是有其他人在同一个项目上进行 B 功能的开发,那么我们在 push 本地代码之前,检查 feat/feedback 分支是否部分落后于上游(upstream) develop 分支:
git checkout develop
git pull
git log feat/feedback..develop
如果没有输出任何提交信息的话,即表示 feat/feedback 分支 相对于 develop 分支 是 最新(up-to-date)的。如果有输出的话去执行 git merge --no-ff ,提交路线图就会分叉,为了得到一个干净清爽的提交路线图,合并前最好先执行:
git checkout feat/feedback
git rebase develop
这会将整个工作分支移到 develop 分支的前面(HEAD),可以使 feat/feedback 分支与上游(upstream) develop 分支同步,最后我们将代码推送到远端(origin)分支。
git push origin feat/feedback
这样 pull request 通过之后,feat/feedback 分支的代码执行合并操作之后,commit 历史拼接到更新到最新的develop 分支之后,最终得到一个干净舒服的提交线图。
提交 pull request
从自己远端(origin)仓库的 feat/feedback 分支想要提交到上游(upstream)主仓库的 develop 分支,需要去在主仓库上Open a pull request :
Code review 通过后我们可以有三种方式将代码合并到上游 github-flow 项目的 develop 分支:
在点击Merge pull request 的时候,我们看到有三个选项,简单介绍一下使用场景:
Create a merge commit
当点击的是 Create a merge commit 时,feature 分支上所有的 commit 都会被加到develop 分支后面,并且会生成一个 merge commit 新节点。这个 pull request 的合并使用的就是 git merge --no-ff操作