實用的git分支模型

image

主分支

倉庫里有兩個永生的主分支:

  • origin/master
  • origin/develop
image
  1. origin/master分支的代碼都是穩(wěn)定的,可以用來發(fā)布到生產(chǎn)環(huán)境的狀態(tài)
  2. origin/develop分支是為了下一次發(fā)布而處于開發(fā)狀態(tài)的,因此,也稱這個分支為“集成分支”
  3. 當(dāng)develop分支的代碼可以發(fā)布,所有的變更都需要merge回master分支,并為其打發(fā)布標(biāo)簽
  4. 因為每次向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ī)則

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)建一個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的原理示意圖:

image

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ī)則

  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分支: 這包括下面幾個動作:

  • 將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)。

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 ....

#提交. 如果同時有多個問題需要修復(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
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容