Git工作流(alpha)
目前Git工作流和Git Flow一致,只是名称的不同.
分支概览
流程
1.开发新功能
从dev分支checkout新的feature分支
命令:
$ git checkout dev
Switched to branch 'dev'
$ git checkout -b dev/my_feature
Switched to a new branch "dev/my_feature"
2.新功能完成
将feature分支合并到dev
命令:
$ git checkout dev
Switched to branch 'dev'
$ git merge --no-ff dev/my_feature
Updating ea1b82a..05e9557 (Summary of changes)
$ git branch -d dev/my_feature
Deleted branch my_feature (was 05e9557)
$ git push origin dev
关于 --no-ff 参数,是为了防止git自动的fast-forward而丢失merge这一动作的信息,方便之后撤销某个feature.
左边使用了--no-ff参数,右边是fast-forward的结果
3.准备发布新功能
从dev创建prepub分支,确定发布的版本号(例如1.2.0).在prepub分支上进行发布前的准备,包括最后的升级全面测试,bug修复等工作.
命令:
$ git checkout dev
Switched to branch 'dev'
$ git checkout -b prepub-1.2.0
Switched to a new branch "prepub-1.2.0"
4.发布
当prepub分支完全达到发布状态,需要发布时.将prepub分支合并到master,打上tag版本号.然后将prepub分支 merge回dev分支,以便下一个新版本的迭代.
命令:
# 将prepub分支合并到master
$ git checkout master
Switched to branch 'master'
$ git merge --no-ff prepub-1.2.0
Merge made by recursive. (Summary of changes)
$ git tag -a 1.2.0
# 将prepub分支合并到dev
$ git checkout dev
$ git merge --no-ff prepub-1.2.0
# 删除prepub分支
$ git branch -d release-1.2
Deleted branch release-1.2 (was ff452fe).
5.修复线上bug
命令:
# 创建hotfix分支
$ git checkout master
Switched to branch 'master'
$ git checkout -b hotfix-1.2.1
Switched to a new branch "hotfix-1.2.1"
6.修复完成
命令:
# 将hotfix分支合并到master
$ git checkout master
Switched to branch 'master'
$ git merge --no-ff hotfix-1.2.1
Merge made by recursive. (Summary of changes)
$ git tag -a 1.2.1
# 将hotfix分支合并到dev
$ git checkout develop
Switched to branch 'develop'
$ git merge --no-ff hotfix-1.2.1
Merge made by recursive. (Summary of changes)
# 删除hotfix分支
$ git branch -d hotfix-1.2.1
Deleted branch hotfix-1.2.1 (was abbe5d6).
Git Flow工具
git-flow-avh是一个GitFlow工具,将各个阶段的命令绑定到了一起.
安装
brew install git-flow-avh
初始化项目
1.开发新功能 git flow feature start
2.新功能完成 git flow feature finish
3.准备发布新功能 git flow release start
4.发布 git flow release finish
6.修复线上bug git flow hotfix start
7.修复完成 git flow hotfix finish
可以用alias简化命名
alias gfi='git flow init'
alias gff='git flow feature'
alias gfr='git flow release'
alias gfh='git flow hotfix'
详细文档看GitHub wiki
Git规范
1.请尽量保证每个commit都是相对完整,有意义的提交,并附上简明扼要(中文)的提交信息.
2.每个commit应包含单一的目的,不要将重构,需求开发,优化等多个动作都放在一个commit,这样不利于reivew.
3.不要在公共分支上使用任何会改变Git提交历史的命令,例如 git reset,git rebase,git amend.
4.pull远程分支前使用--rebase参数,减少不必要的merge动作,保证提交历史的线性(此操作不会有副作用).
5.(可选)在将本地feature分支push到公共feature分支之前,用rebase清理自己的提交,保证commit符合规范,并保证feature分支提交历史的线性.
6.(可选)发起Merge request之前使用rebase清理自己的提交.