以下是基于Vincent Driessen提出的Git Flow 流程图:

gitflow

Git Flow 的常用分支

master 分支

master 分支是最近发布到生产环境的代码,即最近发布的 release,master 分支只能从其他分支合并,不能在这个分支直接修改,所有在 master 分支上的 commit 应该打上 tag,例如 release 合并到 master 应该创建一个 tag 。

develop 分支

这个分支是我们是我们的主开发分支,包含所有要发布到下一个 release 的代码,主要接收其他分支的合并,比如 feature 分支。

feature 分支

这个分支主要是用来开发一个新的功能,一旦开发完成,我们合并回 develop 分支进入下一个 release,原feature 分支进行删除。

release 分支

当需要一个发布一个新 release 的时候,基于 develop 分支创建一个 release 分支,可以在这个 release 上测试,改 Bug;同时,其它开发人员可以继续基于 develop 分支新建 feature 。完成 release 后,将其合并到 master 和 develop 分支,一般发布完 release 分支后,该分支会删除,同时创建一个 tag 记住 release 版本号,之后删除 release。

hotfix分支

当我们在 master 发现新的 Bug 时候,我们需要创建一个 hotfix, 完成 hotfix 后,我们合并回 master 和 develop 分支,同时在 master 上打一个tag, hotfix 的改动会自动进入下一个 release。

Git Flow 命令示例

创建 develop

git branch develop  
git push -u origin develop

开始 feature

# 通过 develop 新建 feaeure 分支
git checkout -b feature/func develop
# 推送至远程服务器:
git push -u origin feature/func

# 假设修改了文件   
git status
git add .
git commit    

完成 feature

git checkout develop 
git pull origin develop

#--no-ff:不使用fast-forward方式合并,保留分支的commit历史
#--squash:使用squash方式合并,把多次分支commit历史压缩为一次

git merge --no-ff feature/func
git push origin develop

git branch -d some-feature

# 如果需要删除远程feature分支:
git push origin --delete feature/func

开始 release

git checkout -b release/1.0.0 develop

完成 release

git checkout master
git merge --no-ff release/1.0.0
git push

git checkout develop
git merge --no-ff release/1.0.0
git push


git branch -d release/1.0.0
git push origin --delete release/1.0.0  

# 合并master/devlop分支之后,打上tag 
git tag -a 1.0.0 master
git push --tags

开始 hotfix

git checkout master
git merge --no-ff hotfix/1.0.1
git push


git checkout develop
git merge --no-ff hotfix/1.0.1
git push

git branch -d hotfix/1.0.1
git push origin --delete  hotfix/1.0.1

git tag -a 1.0.1 master
git push --tags

GUI 工具

上述使用命令行的方式操作起来比较麻烦,建议使用 sourcetree 中的 gitflow 进行操作。