Git最佳实践:Git Flow的使用

代码管理需要一个清晰的流程和规范

GitFlowNavigation

Git Flow 常用分支

  • Production 分支

也就是我们常用的 master 分支,用来发布到生产环境的代码;这个分支只能从其他分支合并,不能在这个分支直接修改代码。

  • Develop 分支

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

  • Feature 分支

这个分支主要用来开发一个新的功能,一旦开发完成,我们合并回Develop分支进入下一个Release

  • Release 分支

当你需要发布一个新Release的时候,我们基于Develop分支创建一个Release分支,完成Release后,我们合并Master和Develop分支

  • Hotfix分支

当我们再Production发现新的Bug时,我们需要创建一个Hotfix,完成Hotfix后,我们合并回master和Develop分支,所以Hotfix的改动会进入下一个Release

Git Flow如何工作

初始分支(master)

所有再master分支上的Commit应该Tag

img

Feature分支

分支名feature/*

Feature分支做完后,必须合并回Develop分支,合并完分支后一般会删掉这个Feature分支。

img

Release分支

分支名release/*

Release分支基于Develop分支创建,打完Release分支后,我们可以在这个Release分支上测试,修改Bug等。同时,其他开发人员可以基于开发新的Feature发布Release分支时,合并Release到Master和Develop分支,同时在Master分支上打个Tag记住Release版本号,然后就可以删除Release分支了。

img

维护Hotfix

分支名hotfix/*

hotfix分支基于Master分支创建,开发完成后要合并会Master和Develop分支,同时在Master上打一个Tag。

img

Git Flow代码示例

  1. 创建develop分支
1
2
git branch develop
git push -u origin devlop
  1. 开始新Feature开发
1
2
3
4
5
6
7
8
git checkout -b some-feature develop
# Optionally, push branch to origin:
git push -u origin some-feature

# 做一些改动
git status
git add some-file
git commit
  1. 完成Feature
1
2
3
4
5
6
7
8
9
git pull origin develop
git checkout develop
git merge --no--ff some-feature
git push origin develop

git branch -d some-feature

# If you pushed branch to origin:
git push origin --delete some-feature
  1. 开始Release
1
2
3
4
git checkout -b release-0.1.0 develop

# Optional: Bump version number, commit
# Prepare release, commit
  1. 完成Release
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
git checkout master
git merge --no--ff release-0.1.0
git push

git checkout develop
git merge --no--ff release-0.1.0
git push

git branch -d release-0.1.0

# If you pushed branch to origin:
git push origin --delete release-0.1.0

git tag -a v0.1.0 master
git push --tags
  1. 开始Hotfix
1
git checkout -b hotfix-0.1.1 master
  1. 完成Hotfix
1
2
3
4
5
6
7
8
9
10
11
12
git checkout master
git merge --no--ff hotfix-0.1.1
git push

git checkout develop
git merge --no--ff hotfix-0.1.1
git push

git branch -d hotfix-0.1.1

git tag -a v0.1.1 master
git push --tags