git 的使用 和 team pr | 青训营;

109 阅读4分钟

fork

 

首先,多人协作的情况,我们通常会 fork团队项目主仓库到自己的托管空间下,然后 Clone 到本地进行开发,假设团队项目的托管地址为:

 

github.com/fe/github-f…

 

此时主仓库项目下的固定分支两个,分别是 master,develop。

 

Clone 到本地:

 

git clone git@github.com:fe/github-flow.git

 

假设上面主仓库 fork 之后的项目地址为:

 

github.com/xxx/github-…

 

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操作