Git 工作流

简单整理一下多人同一远程仓库git工作流模式。

1. 初始化本地仓库

1
2
3
4
5
6
// 已有项目
git clone git@github.com:mrzzcn/mrzzcn.github.io.git

// 新建项目
git init

2. 分支

三个基本分支:
master: 稳定分支,用于发布和修改产品bug;
test: 测试分支,用于发布测试服务器共内部测试;
dev: 开发分支,用于开发时测试和发布,随时合并新功能代码或bug修复;

3. 开发流程

1 每个新功能基于dev分支,创建新分支开始,例如现在要增加一个登录功能:

1
2
3
4
5
6
7
// 当前位于dev分支
git checkout -b feature-login

// more coding

git add -A
git commit -m 'feature-login completed'

2 新功能完成,自己测试之后,需要合并到dev分支:

1
2
3
4
5
6
7
8
9
10
11
// 当前位于dev分支
git pull // 首先拉取远程分支

// dev分支(冲突解决完成)clean之后
git checkout feature-login
git rebase dev // 保留dev的其他人的提交记录并合并dev分支到当前新功能分支

// dev 分支合并之后(可能有冲突需要解决)
git checkout dev
git rebase feature-login

这时的分支状态:

3 接下来,可以删除feature-login分支:

1
2
// 当前位于dev分支
git branch -d feature-login

4 这时,feature-login 基本开发完成,可以合并到test分支,发布给QA测试

1
2
// 当前位于 test 分支
git rebase dev

5 如果QA测出bug需要修改,或者临时有需求变动,需要重复上述步骤,不过命名可以修改,例如 fix-login-bug-1024。如果是细节调整或者是晓得修改则可以在dev分支直接执行。
6 所有功能测试无误之后,可以合并到 master 分支,发布生产环境

1
2
3
4
5
6
// 当前位于 master 分支
git rebase dev

// 也可能根据不同功能的测试状态,会执行不同的合并操作
git merge ...

4. 线上bug临时修改

如果生产环境突然出现bug需要修改,或者要改一些细节部分,则需要直接在 master 上执行,然后合并到 dev

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// 当前位于 master 分支
git checkout -b hotfix-bug1117

// more coding

git add -A
git commit -m 'fixed hotfix-bug1117'

git checkout master
git rebase hotfix-bug1117

// 然后发布

// 最后,需要把修改合并到dev分支,假如刚才的提交commit是abcdefg
git checkout dev
git cherry-pick abcdefg
// 可能需要解决冲突

// 最后 删除 `hotfix-bug1117` 分支
git branch -d hotfix-bug1117