以下是基于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 进行操作。