其本質(zhì)是團(tuán)隊(duì)成員(在develop分支上)的工作可以繼續(xù),而另一個(gè)人準(zhǔn)備生產(chǎn)環(huán)境的快速修復(fù)。
創(chuàng)建修補(bǔ)bug分支
hotfix branch(修補(bǔ)bug分支)是從Master分支上面分出來的。例如,1.2版本是當(dāng)前生產(chǎn)環(huán)境的版本并且有bug。但是開發(fā)分支(develop)變化還不穩(wěn)定。我們需要分出來一個(gè)修補(bǔ)bug分支(hotfix branch)來解決這種情況。
$ 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(-)
分支關(guān)閉的時(shí)侯不要忘了更新版本號(bump the version)
然后,修復(fù)bug,一次提交或者多次分開提交。
$ git commit -m "Fixed severe production problem"
[hotfix-1.2.1 abbe5d6] Fixed severe production problem
5 files changed, 32 insertions(+), 17 deletions(-)
完成一個(gè)hotfix分支
完成一個(gè)bugfix之后,需要把butfix合并到master和develop分支去,這樣可以保證修復(fù)的這個(gè)bug也包含到下一個(gè)發(fā)行版中。這一點(diǎn)和完成release分支很相似。
首先,更新master并對release打上tag:
$ 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
編輯:你可能也會想使用 -sor-u 參數(shù)來對你的tag進(jìn)行加密
下一步,把bugfix添加到develop分支中:
$ git checkout develop
Switched to branch 'develop'
$ git merge --no-ff hotfix-1.2.1
Merge made by recursive.
(Summary of changes)
規(guī)則的一個(gè)例外是: 如果一個(gè)release分支已經(jīng)存在,那么應(yīng)該把hotfix合并到這個(gè)release分支,而不是合并到develop分支。當(dāng)release分支完成后, 將bugfix分支合并回release分支也會使得bugfix被合并到develop分支。(如果在develop分支的工作急需這個(gè)bugfix,等不到release分支的完成,那你也可以把bugfix合并到develop分支)
后,刪除臨時(shí)分支:
$ git branch -d hotfix-1.2.1
Deleted branch hotfix-1.2.1 (was abbe5d6).
摘要
盡管這個(gè)分支模型沒有任何震撼的新東西, 文章開頭的圖表在我們的項(xiàng)目中表現(xiàn)出驚人的實(shí)用性。它形成了一個(gè)優(yōu)雅的思維模型,易于領(lǐng)悟并使團(tuán)隊(duì)成員發(fā)展出對分支和發(fā)布過程的共同理解。
這里提供一份高質(zhì)量PDF格式圖表。去吧,把它掛載墻上以便能隨時(shí)快速參考。