實(shí)用的git分支模型

image

主分支

倉(cāng)庫(kù)里有兩個(gè)永生的主分支:

  • origin/master
  • origin/develop
image
  1. origin/master分支的代碼都是穩(wěn)定的,可以用來(lái)發(fā)布到生產(chǎn)環(huán)境的狀態(tài)
  2. origin/develop分支是為了下一次發(fā)布而處于開發(fā)狀態(tài)的,因此,也稱這個(gè)分支為“集成分支”
  3. 當(dāng)develop分支的代碼可以發(fā)布,所有的變更都需要merge回master分支,并為其打發(fā)布標(biāo)簽
  4. 因?yàn)槊看蜗騧astermerge代碼,都意味著一次產(chǎn)品發(fā)布,因此可以用git hook腳本在每次向master的提交動(dòng)作時(shí),自動(dòng)編譯,觸發(fā)發(fā)布流程

支持分支

模型中定義了三種支持分支:

  • feature 分支 (新功能開發(fā))
  • release 分支(版本發(fā)布)
  • hotfix 分支(熱修復(fù)開發(fā))

feature 分支

feature分支描述

feature分支專門用來(lái)開發(fā)新功能。但是在開始開發(fā)新功能的時(shí)候,并不知道這個(gè)新功能究竟會(huì)在哪個(gè)發(fā)布版本上被發(fā)布。因而,某些新功能分支可能會(huì)存在比較久并一直處于開發(fā)狀態(tài),但是最終會(huì)被merge回develop分支上或被遺棄。
feature分支只應(yīng)該存在于develop倉(cāng)庫(kù)中,不應(yīng)該在origin倉(cāng)庫(kù)中出現(xiàn)。

feature分支的規(guī)則

image
  1. 在develop分支上創(chuàng)建 feature分支
  2. 必須且只能merge回 develop分支
  3. 命名規(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)建一個(gè)commit節(jié)點(diǎn),以保證提交信息不會(huì)丟失
git merge --no-ff myfeafure

#從本地倉(cāng)庫(kù)中刪除myfeature分支
git branch -d myfeature

#將本地變更推到遠(yuǎn)程的develop倉(cāng)庫(kù)保存
git push origin develop

使用--no-ff與不適用--no-ff參數(shù)時(shí),merge的原理示意圖:

image

release 分支

release分支的描述
release用來(lái)做封版操作,為發(fā)版做準(zhǔn)備。在這個(gè)分支上,可以做功能測(cè)試,驗(yàn)收測(cè)試,測(cè)試過(guò)程中的bug修復(fù),及發(fā)版所需的數(shù)據(jù)準(zhǔn)備(版本號(hào),構(gòu)建日期,數(shù)據(jù)庫(kù)數(shù)據(jù)準(zhǔn)備,等等)
不允許在release分支上做大的新功能開發(fā),只能做bug fix。新功能開發(fā)需使用feature分支。
在創(chuàng)建release分支的時(shí)候會(huì)為此分支賦予版本號(hào),但是這個(gè)版本號(hào)與develop分支發(fā)版的版本號(hào)無(wú)關(guān),只是對(duì)此release版本迭代管理時(shí)用來(lái)進(jìn)行版本區(qū)分。

release 分支的規(guī)則

  1. 從develop分支上創(chuàng)建release分支
  2. 必須merge回develop和master分支
  3. 命名規(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分支: 這包括下面幾個(gè)動(dòng)作:

  • 將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ù)時(shí),就可以創(chuàng)建hotfix分支。代碼修復(fù)結(jié)束,提交回master,進(jìn)入到可發(fā)布狀態(tài)。

image

hotfix分支的規(guī)則

  1. 必須從master分支創(chuàng)建hotfix分支
  2. 需要merge回develop和master分支
  3. 命名規(guī)則: hotfix-*

hotfix分支的基本命令

創(chuàng)建hotfix分支

#從master上創(chuàng)建hotfix分支, 并切換到hotfix分支上
git checkout -b hotfix-1.2.1 master

#.... 修復(fù)bug ....

#提交. 如果同時(shí)有多個(gè)問(wèn)題需要修復(fù),在每個(gè)提交中修復(fù)一個(gè)問(wèn)題
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分支上此時(shí)存在一個(gè)release分支,hotfix代碼需要merge到這個(gè)release分支而不是直接進(jìn)入到develop分支,在release分支merge到develop分支后,此次的hotfix代碼會(huì)被最終merge到develop上。

hotfix的代碼已經(jīng)merge回master和develop后,可以刪除此分支

git branch -d hotfix-1.2.1
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容