Main Branch
最主要的兩個分支
- master (除非重大 bug,則會分出 hotfix 分支)
- develop (用來在另外分支出 Release, feature)
origin/master
總是代表準備就緒的狀態 (always reflects a production-ready state.)origin/develop
always reflects a state with the latest delivered development changes for the next release
當develop branch
到達穩定且可被發布的狀態(stable point and is ready to be released) -> 合併到Master
-> 標記(Tag)版本號
因此,每次有变化被合并到master分支时,根据定义这就是一次新的产品版本发布。我们趋向于严格遵守该规范,所以理论上来说,每次master有提交时,我们都可以使用一个Git钩子(hook)脚本来自动构建并部署软件至产品环境服务器。
Supporting branche
我們會用到的分支有這幾類:
- Feature branches (由 develop 直接分支,開發新功能)
- Release branches (由 develop 直接分支,開發下一版 Release)
- Hotfix branches (由 master 直接分支,馬上修正 bug)
Feature branches
規定:
- 可能的分支來源:develop
- 必須合併至:develop
- 分支命名制約(naming convention):任何除master, develop, release-, 或 hotfix-以外的名稱
特點:
- 只要特性还在开发,该分支就会一直存在
- 不过它最终会被合并回develop分支(将该特性加入到发布版本中)
- 被丢弃(如果试验的结果令人失望)
Creating a feature branch (创建一个特性分支)
開始開發新功能的時候,從develop分支創建功能分支。
$ git checkout -b myfeature develop
Incorporating a finished feature on develop (合并完成的特性回develop)
已完成的特性應該被合併回develop分支以将特性加入到下一个发布版本中:
$ git checkout develop
# Switched to branch 'develop'
$ git merge --no-ff myfeature
# Updating ea1b82a..05e9557
# (Summary of changes)
$ git branch -d myfeature
# Deleted branch myfeature (was 05e9557).
$ git push origin develop
git merge --no-ff
與 git merge
的差異
--no-ff
意思為no fast forward
原本會以為說merge會有明顯的分支,出去之後再回來
但是有一個例外狀況是
- master沒有新的commit
- develop merge回master
這種情形的合併會和rebase的結果
一樣
所以為了要有分支之後在合併回來的狀態
就得下git merge --no-ff
為何選擇git merge --no-ff
這裏我們想要凸顯出,在這個區域中,有feature被合併回來
即便他有多一個merge commit
Release branches
規定:
- 可能的分支來源:develop
- 必須合併至:develop and master
- 分支命名制約(naming convention):release-*
创建一个发布分支
develop分支的状态已经是准备好“下一版本”发布了,我们也决定下个版本是1.2(而不是1.1.6或者2.0)。因此我们创建发布分支,并且为其赋予一个能体现新版本号的名称:
develop ready next version
-> Decide version(now 1.2) -> Create Release branch(release-1.2)
$ 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(-)
新的发布分支可能存在一段时间,直到该版本明确对外交付。
- 这段时间内,该分支上可能会有一些bug的修复(而不是在develop分支上)
- 在该分支上添加新特性是严格禁止的。
- 新特性必须合并到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
合併release 回 develop
$ git checkout develop
Switched to branch 'develop'
$ git merge --no-ff release-1.2
Merge made by recursive.
(Summary of changes)
最后一步是删除发布分支,因为我们已不再需要它:
$ git branch -d release-1.2
# Deleted branch release-1.2 (was ff452fe).
Hotfix branches
規定:
- 可能的分支來源:master
- 必須合併至:develop and master
- 分支命名制約(naming convention):hotfix-*
動作:
- 建立hotfix branch -> 修復bug(途中也許由多個commit) -> 合併回master,並標上新tag & 同時合併回develop
例外狀況(如果這時候release分支存在的話):
- 合併到release分支,而不是develop分支
Source:
a
H1
a
img
hr
li
table
**
``
code
>