工作流
有 4 种常用工作流
- 集中式
- 功能分支
- Git Flow
- Forking
集中式
本地修改后直接提交到远程 master,有冲突解决冲突。
团队不建议使用,代码混乱,容易出问题。


功能分支
功能分支工作流基于集中式工作流演进而来。适合开发团队相对固定,规模较小的项目。
开发新功能时,基于 master 分支创建一个临时功能分支,在分支上开发,开发完成后合并到 master。
- 仅在最后一步合并到 master 分支,使提交历史更简洁
- 不同的功能分配给不同的开发人员,避免冲突

具体流程
-
基于 master 创建功能分支
1git checkout -b feature/xxx -
在分支开发,推送到远程
1 2 3git add xxx.go git commit -m "add xxx" git push origin feature/xxx -
创建 PR

-
代码管理员对代码做 Code Review,审查完成合并到 master

merge 有三种方法
- Create a merge commit,
git merge --no-ff,所有 commit 合并成一个,添加到 master。该命令是指强行关闭fast-forward,但会保存特性分支历史,推荐这种。 - Squash and merge,
git merge --squash,将不必要的分支上其 commit 压缩合并,创建一个新的提交添加到 master。 - Rebase and merge,
git rebase,将分支所有 commit 依次添加到 master,属于fast_forward方式合并。



Git Flow
Git Flow 工作流是一个非常成熟的方案,也是非开源项目中最常用到的工作流。适合大型的项目或者迭代速度快的项目。
5 种分支
| 分支名 | 描述 |
|---|---|
| master | 发布状态,禁止开发,每次合并 hotfix/release 要打版本标签 |
| develop | 最新代码,禁止开发 |
| feature | 研发功能分支,基于 develop,开发完成后合并到 develop 并删除该分支 |
| release | 预发布分支,基于 develop,通过测试后合并到 master 和 develop,并删除该分支 |
| hotfix | 维护阶段分支,紧急 bug 修复,基于 master 分支创建,完成后合并到 master 和 develop 并删除 |

Forking
开源项目中,最常用到的是 Forking 工作流。
假设开发者 A 拥有一个远程仓库,如果开发者 B 也想参与 A 项目的开发,B 可以 fork 一份 A 的远程仓库到自己的 GitHub 账号下,在自己的仓库中修改,完成后向 A 的仓库提交 PR。

具体流程
-
fork 仓库
-
克隆仓库
1 2 3 4 5git clone https://github.com/xxx/kitx cd kitx git remote add upstream https://github.com/ixugo/kitx # 禁止推送到 upstream ,实际上一般也没有权限,因为那并不是你的仓库 git remote set-url --push upstream no_pus -
创建功能分支
1 2 3 4 5# 要同步 master 最新状态 git fetch upstream git checkout master && git rebase upstream/master # 创建分支 git checkout -b feature/files -
完成开发,提交
1 2 3 4 5 6 7# 在特性分支,同步远程仓库最新状态 git fetch upstream && git rebase upstream/master # 提交代码 git add file.go git commit -m "xxx 功能" # 推送到自己的远程仓库 git push origin feature/files -
在 github 自己的仓库那,创建 Pull request。
参考
A successful Git branching model