Git分支管理---东科教育

目的

本文介绍了如何使用git来进行项目的开发和发布。创建哪些分支,以及在各种场景下的处理方式。

原文:http://nvie.com/posts/a-successful-git-branching-model/

流程图

image

分支介绍

  • origin服务器上主要存两个分支:master和develop
  • 开发服务器上一共有五类分支:除了master和develop之外,还有feature branches, release branches以及hotfix branches

image

master

  • master分支是用来发布稳定版本的分支,每个版本发布都会打tag。
  • 对于master分支上的每次提交都需要严格测试。
  • 只有release和hotfix分支才能merge到master分支

develop

  • develop分支用来存放下次发版的代码改动。
  • 所有的feature分支都基于develop拉,只有下个版本要发布的feature才会merge到develop分支。
  • 以后才发布的feature不要merge到develop分支
  • 在决定发布下个版本时,从develop分支拉一个release分支,同时确定版本名。如:release-1.2

feature branches

May branch off from:
develop
Must merge back into:
develop
  • 每个功能开发都基于develop拉一个新分支
  • 分支名称可以为:dbg_username_featurename
git checkout -b dbg_gyf_myfeature develop
  • 功能开发完成后,如果决定在下个版本发布,则merge回develop
$ git checkout develop
Switched to branch 'develop'
$ git merge --no-ff dbg_gyf_myfeature
Updating ea1b82a..05e9557
(Summary of changes)
$ git branch -d dbg_gyf_myfeature
Deleted branch dbg_gyf_myfeature (was 05e9557).
$ git push origin develop

The --no-ff flag causes the merge to always create a new commit object, even if the merge could be performed with a fast-forward. This avoids losing information about the historical existence of a feature branch and groups together all commits that together added the feature. Compare: imageIn the latter case, it is impossible to see from the Git history which of the commit objects together have implemented a feature—you would have to manually read all the log messages. Reverting a whole feature (i.e. a group of commits), is a true headache in the latter situation, whereas it is easily done if the --no-ff flag was used.

Release branches

May branch off from:
develop
Must merge back into:
develop and master
Branch naming convention:
release-*
  • release分支用来做版本发布。当develop具备发版条件时,从develop拉出releae分支,同时决定版本名称
$ git checkout -b release-1.2 develop
Switched to a new branch "release-1.2"
$ ./bump-version.sh 1.2
Files modified successfully, version bumped to 1.2.
$ git commit -a -m "Bumped version number to 1.2"
[release-1.2 74d9424] Bumped version number to 1.2
1 files changed, 1 insertions(+), 1 deletions(-)

bump-version.sh用来将源码中的版本号改成1.2

  • 一旦release分支拉出来,就不再允许增加大的feature改动,只能进行bug fix,fix的改动只能merge到release分支。等正式release完成,再统一merge回develop
  • release测试完成,就可以进行发版到master分支,同时打tag
$ git checkout master
Switched to branch 'master'
$ git merge --no-ff release-1.2
Merge made by recursive.
(Summary of changes)
$ git tag -a 1.2
  • 还要merge回develop分支
$ git checkout develop
Switched to branch 'develop'
$ git merge --no-ff release-1.2
Merge made by recursive.
(Summary of changes)
  • 删除release分支
$ git branch -d release-1.2
Deleted branch release-1.2 (was ff452fe).

hotfix branches

May branch off from:
master
Must merge back into:
develop and master
Branch naming convention:
hotfix-*
  • 当master分支已经发版,又发现了严重问题,需要紧急修复,则需要从master拉一个hotfix分支改动

image

$ git checkout -b hotfix-1.2.1 master
Switched to a new branch "hotfix-1.2.1"
$ ./bump-version.sh 1.2.1
Files modified successfully, version bumped to 1.2.1.
$ git commit -a -m "Bumped version number to 1.2.1"
[hotfix-1.2.1 41e61bb] Bumped version number to 1.2.1
1 files changed, 1 insertions(+), 1 deletions(-)
$ git commit -m "Fixed severe production problem"
[hotfix-1.2.1 abbe5d6] Fixed severe production problem
5 files changed, 32 insertions(+), 17 deletions(-)
  • 修复完成后,merge回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
  • 如果release分支已经delete:merge回develop分支
$ git checkout develop
Switched to branch 'develop'
$ git merge --no-ff hotfix-1.2.1
Merge made by recursive.
(Summary of changes)
  • 如果release分支仍然存在,还没有merge回develop:merge hotfix到release分支,再统一merge release到develop
  • 最后再删除hotfix分支
$ git branch -d hotfix-1.2.1
Deleted branch hotfix-1.2.1 (was abbe5d6).
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值