以下是基于Vincent Driessen提出的Git Flow 流程图:
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 进行操作。