主分支
倉庫里有兩個永生的主分支:
- origin/master
- origin/develop
- origin/master分支的代碼都是穩(wěn)定的,可以用來發(fā)布到生產(chǎn)環(huán)境的狀態(tài)
- origin/develop分支是為了下一次發(fā)布而處于開發(fā)狀態(tài)的捞蚂,因此鞍盗,也稱這個分支為“集成分支”
- 當(dāng)develop分支的代碼可以發(fā)布需了,所有的變更都需要merge回master分支跳昼,并為其打發(fā)布標(biāo)簽
- 因為每次向mastermerge代碼,都意味著一次產(chǎn)品發(fā)布肋乍,因此可以用git hook腳本在每次向master的提交動作時鹅颊,自動編譯,觸發(fā)發(fā)布流程
支持分支
模型中定義了三種支持分支:
- feature 分支 (新功能開發(fā))
- release 分支(版本發(fā)布)
- hotfix 分支(熱修復(fù)開發(fā))
feature 分支
feature分支描述
feature分支專門用來開發(fā)新功能墓造。但是在開始開發(fā)新功能的時候堪伍,并不知道這個新功能究竟會在哪個發(fā)布版本上被發(fā)布。因而觅闽,某些新功能分支可能會存在比較久并一直處于開發(fā)狀態(tài)帝雇,但是最終會被merge回develop分支上或被遺棄。
feature分支只應(yīng)該存在于develop倉庫中蛉拙,不應(yīng)該在origin倉庫中出現(xiàn)摊求。
feature分支的規(guī)則
- 在develop分支上創(chuàng)建 feature分支
- 必須且只能merge回 develop分支
- 命名規(guī)范: 可以使用除master, develop, release-*, hotfix-* 外的各種名稱
feature分支的基本使用命令
從develop分支上創(chuàng)建feature分支
git checkout -b myfeature develop
將feature分支merge回develop分支
#切換到develop分支
git checkout develop
#將myfeature merge到develop上。--no-ff 參數(shù)就讓merge命令創(chuàng)建一個commit節(jié)點刘离,以保證提交信息不會丟失
git merge --no-ff myfeafure
#從本地倉庫中刪除myfeature分支
git branch -d myfeature
#將本地變更推到遠(yuǎn)程的develop倉庫保存
git push origin develop
使用--no-ff與不適用--no-ff參數(shù)時室叉,merge的原理示意圖:
release 分支
release分支的描述
release用來做封版操作,為發(fā)版做準(zhǔn)備硫惕。在這個分支上茧痕,可以做功能測試,驗收測試恼除,測試過程中的bug修復(fù)踪旷,及發(fā)版所需的數(shù)據(jù)準(zhǔn)備(版本號,構(gòu)建日期豁辉,數(shù)據(jù)庫數(shù)據(jù)準(zhǔn)備令野,等等)
不允許在release分支上做大的新功能開發(fā),只能做bug fix徽级。新功能開發(fā)需使用feature分支气破。
在創(chuàng)建release分支的時候會為此分支賦予版本號,但是這個版本號與develop分支發(fā)版的版本號無關(guān)餐抢,只是對此release版本迭代管理時用來進(jìn)行版本區(qū)分现使。
release 分支的規(guī)則
- 從develop分支上創(chuàng)建release分支
- 必須merge回develop和master分支
- 命名規(guī)則: release-*
release分支基本使用命令
從develop分支上創(chuàng)建新的release分支
#創(chuàng)建release-1.2分支,并切換到此分支上
git checkout -b release-1.2 develop
#..... 開發(fā) .....
#提交
git commit -a -m "此版本發(fā)布信息描述"
完結(jié)release分支: 這包括下面幾個動作:
- 將release分支merge回master分支
- 提交到master后旷痕,必須創(chuàng)建標(biāo)記
- 將release分支merge回develop分支
在master分支上的操作命令
#切換到master分支上
git checkout master
#merge release分支到master上
git merge --no-ff release-1.2
#在master上為本次提交創(chuàng)建標(biāo)記
git tag -a 1.2
在develop分支上的操作命令
#切換到develop分支
git checkout develop
#merge release分支到develop分支上
git merge --no-ff release-1.2
完成merge操作后碳锈,可以刪除release分支
#刪除release分支
git branch -d release-1.2
hotfix 分支
hotfix分支的描述
hotfix分支與release分支類似,都是為發(fā)版做準(zhǔn)備欺抗。hotfix分支必須是從master的已發(fā)版狀態(tài)的標(biāo)記上創(chuàng)建售碳。
當(dāng)發(fā)版程序遇到了嚴(yán)重的bug需要立刻修復(fù)時,就可以創(chuàng)建hotfix分支。代碼修復(fù)結(jié)束贸人,提交回master竿屹,進(jìn)入到可發(fā)布狀態(tài)。
hotfix分支的規(guī)則
- 必須從master分支創(chuàng)建hotfix分支
- 需要merge回develop和master分支
- 命名規(guī)則: hotfix-*
hotfix分支的基本命令
創(chuàng)建hotfix分支
#從master上創(chuàng)建hotfix分支灸姊, 并切換到hotfix分支上
git checkout -b hotfix-1.2.1 master
#.... 修復(fù)bug ....
#提交. 如果同時有多個問題需要修復(fù),在每個提交中修復(fù)一個問題
git commit -a -m "修復(fù)bug的描述"
完結(jié)本次修復(fù)工作
提交修復(fù)代碼到master
# 切換到master分支
git checkout master
#merge代碼到master
git merge --no-ff hotfix-1.2.1
#在master上為本次提交創(chuàng)建標(biāo)記
git tag -a 1.2.1
提交修復(fù)代碼到develop分支上
# 切換到develop分支上
git checkout develop
#merge代碼到develop上
git merge --no-ff hotfix-1.2.1
注意秉溉,如果在develop分支上此時存在一個release分支力惯,hotfix代碼需要merge到這個release分支而不是直接進(jìn)入到develop分支,在release分支merge到develop分支后召嘶,此次的hotfix代碼會被最終merge到develop上父晶。
hotfix的代碼已經(jīng)merge回master和develop后,可以刪除此分支
git branch -d hotfix-1.2.1