Simple Gitflow
業(yè)務(wù)越來(lái)越復(fù)雜兴喂,分支也越來(lái)越多勇婴,為提高效率和規(guī)避流程錯(cuò)誤肛走,商定一個(gè)統(tǒng)一的工作流程是至關(guān)重要的辙芍。
先上圖~
分支
Master
它是一個(gè)長(zhǎng)期分支,存在于整個(gè)項(xiàng)目周期羹与。
master
分支上不允許任何代碼提交,只能由負(fù)責(zé)人進(jìn)行分支合并纵搁。該分支存放的應(yīng)該是隨時(shí)可供在生產(chǎn)環(huán)境中部署的代碼。
Feature
-
臨時(shí)分支往踢,用于開(kāi)發(fā)新功能腾誉,不同業(yè)務(wù)可創(chuàng)建多個(gè)
feature
分支。 - 從
master
分支創(chuàng)建峻呕,開(kāi)發(fā)測(cè)試完成利职,合并至release
分支后刪除。
Release
- 臨時(shí)分支瘦癌,用于預(yù)發(fā)布或回歸測(cè)試猪贪。
- 從
master
分支創(chuàng)建,發(fā)布后打tag合并至master后刪除讯私。 - 命名建議:release/1.x.x
Hotfix
- 臨時(shí)分支热押,用于修復(fù)線上問(wèn)題。
- 從
master
分支創(chuàng)建斤寇,發(fā)布后打tag合并至master后刪除桶癣。 - 命名建議:hotfix/bugName
為什么沒(méi)有develop分支?
develop
分支的職責(zé)已經(jīng)分配到了feature
和hotfix
分支娘锁,這樣臨時(shí)分支的修改也不用同步到兩個(gè)分支(develop和master)牙寞,為避免混淆,所以移除了develop
分支莫秆。
場(chǎng)景1:多個(gè)feature并行開(kāi)發(fā)
假設(shè)5月收到需求间雀,我們要做群密聊悔详,計(jì)劃6月上線,并且在群密聊上線前雷蹂,有個(gè)0528優(yōu)化版本要上伟端。
好了,場(chǎng)景有了匪煌,來(lái)看看具體流程怎么操作责蝠。
- 創(chuàng)建feature分支
從master
分支分別創(chuàng)建feature/groupSChat、feature/me0528萎庭,命名最好貼合業(yè)務(wù)霜医。
git checkout master
git branch feature/groupSChat
git branch feature/me0528
分支建好后,就進(jìn)入開(kāi)發(fā)和測(cè)試階段驳规;在經(jīng)歷N次提交和測(cè)試后準(zhǔn)備上線肴敛。
- 創(chuàng)建release分支
假設(shè)5月份版本是5.5.5 ,從master
分支創(chuàng)建release/5.5.5分支吗购,然后合并feature/me0528分支医男。
// 從master分支創(chuàng)建release/5.5.5分支并切換到該分支
git checkout master
git checkout -b release/5.5.5
git merge feature/me0528
git branch -d feature/me0528
- 打包上線-5.5.5版本
在release/5.5.5
分支進(jìn)行最終測(cè)試后上線,我們打上tag并合并到master捻勉,然后刪除release/5.5.5分支镀梭。
git checkout master
git merge release/5.5.5
git tag v5.5.5
git branch -d release/5.5.5
注意,到現(xiàn)在雖然5.5.5版本上線了踱启,隔壁分支feature/groupSChat
還在緊張開(kāi)發(fā)中报账,但它絲毫沒(méi)有受到影響。
- 群密聊feature埠偿,在經(jīng)過(guò)N次提交和測(cè)試后透罢,準(zhǔn)備上線
假設(shè)群密聊版本是6.0.0,從master
分支創(chuàng)建release/6.0.0分支冠蒋,然后合并feature/groupSChat分支羽圃。
git checkout master
git checkout -b release/6.0.0
git merge feature/groupSChat
git branch -d feature/groupSChat
- 打包上線-6.0.0版本
在release/6.0.0
分支進(jìn)行最終測(cè)試后上線,我們打上tag并合并到master抖剿,然后刪除release/6.0.0分支统屈。
git checkout master
git merge release/6.0.0
git tag v6.0.0
git branch -d release/6.0.0
到這里,我們并行開(kāi)發(fā)的兩個(gè)feature都上線了牙躺;開(kāi)發(fā)過(guò)程中我們創(chuàng)建的feature愁憔、release等分支,也隨發(fā)版后刪除了孽拷,倉(cāng)庫(kù)里只是多了兩個(gè)tag標(biāo)簽吨掌。
場(chǎng)景2:緊急修復(fù)線上bug
假設(shè)在場(chǎng)景1中,剛開(kāi)始做feature/me0528和feature/groupSChat功能不久,就發(fā)現(xiàn)線上版本有嚴(yán)重問(wèn)題膜宋,領(lǐng)導(dǎo)要求馬上修復(fù)后上線窿侈。這時(shí)你可能會(huì)想,我已經(jīng)有兩個(gè)分支在開(kāi)發(fā)了秋茫,該咋辦呢史简?別擔(dān)心,你還有master分支肛著,它存放著可供在生產(chǎn)環(huán)境中部署的代碼圆兵。
- 創(chuàng)建hotfix分支
假設(shè)這個(gè)嚴(yán)重問(wèn)題是導(dǎo)致通訊錄用不了,contact not work 枢贿?
git checkout master
git branch hotfix/contactNotWork
- 打包上線-5.5.1版本
git checkout master
git merge hotfix/contactNotWork
git tag v5.5.1
git branch -d hotfix/contactNotWork
- 首先殉农,這里假設(shè)線上版本為5.5.0,bug修復(fù)后發(fā)版為5.5.1
- 與feature分支不同的是局荚,hotfix分支的代碼基于穩(wěn)定的功能超凳,測(cè)試完畢后不需要通過(guò)release分支即可發(fā)布上線。
小結(jié)
- 除了master分支耀态,其它都是臨時(shí)分支轮傍,倉(cāng)庫(kù)中只有master分支和正在開(kāi)發(fā)的feature分支,便于維護(hù)首装。
- 臨時(shí)分支都是從master分支創(chuàng)建的金麸。
- feature分支通過(guò)測(cè)試后才創(chuàng)建并合并到release分支。
- 通過(guò)創(chuàng)建release分支簿盅,能有效避免丟失已上線的功能或bug修復(fù)代碼。
- 場(chǎng)景中分支合并示例使用的
git merge
揍魂,當(dāng)然你也可以用git rebase
桨醋,關(guān)于二者的區(qū)別可參考文末鏈接。
Thanks
關(guān)于本文的由來(lái)现斋,首先要感謝 騏彰
同學(xué)提供的思路喜最,和現(xiàn)有團(tuán)隊(duì)的支持,才促使我整理了這篇文章庄蹋,感謝瞬内。