關于git flow

<1> Git flow是git的一個擴展集,它基于Vincent Driessen 的分支模型,文章“A successful Git branching model”對這一分支模型進行了描述,其示意圖如下:

git flow分支模型

圖片.png

上圖從左往右看,分別為

  • 時間軸,從上往下時間在流逝

  • feature分支(玫紅),圖上有兩個feature分支,在這個分支上,進行功能特性的開發

  • develop分支(黃色),git flow的主分支,feature分支和release分支都會將代碼合并到此分支上

  • release分支(綠色),總是基于develop分支創建,最后合并到develop分支和master分支

  • hotfix分支(紅色),總是基于master分支創建,最后合并到master分支和develop分支

  • master分支(藍色),git flow的主分支,在開發的整個階段一直存在,平時不在此分支開發,因此代碼比較穩定,可以用來發布

<2> Git flow的源碼可以通過以下鏈接下載:

https://github.com/nvie/gitflow

或者,直接輸入以下命令安裝git flow:

apt-get install git-flow

在Windows平臺下安裝git flow,可以參考《Windows環境下msysgit安裝git flow》。

我們可以通過以下命令來初始化一個現有的git本地倉庫。

git flow init

接著回答幾個關于分支的問題。不用擔心,使用默認值即可,直接按回車鍵。

No branches exist yet. Base branches must be created now

Branch name for production releases: [master]

Branch name for “next release” development: [develop]

How to name your supporting branch prefixes?

Feature branches? [feature/]

Release branches? [release/]

Hotfix branches? [hotfix/]

Support branches? [support/]

Version tag prefix? []

這樣,便完成了git flow的初始化工作。

<3> 在git flow 的分支模型中,有兩個主分支master和develop,還有幾個額外的分支來支持代碼的版本管理。下面先簡要介紹一下這些分支的特點和git flow常用命令的使用。

  • ①. Master

master分支只有一個。

master分支上的代碼總是穩定的,隨時可以發布出去。

平時一般不在master分支上操作,當release分支和hotfix分支合并代碼到master分支上時,master上代碼才更新。

當倉庫創建時,master分支會自己創建。

  • ②. Develop

develop分支只有一個。

新特性的開發是基于develop分支的,但不直接在develop分支上開發,特性的開發是在feature分支上進行。

當develop分支上的特性足夠多以至于可以進行新版本的發布時,可以創建release分支的。

  • ③. Feature

可以同時存在多個feature分支,新特性的開發正是在此分支上面。

可以對每個新特性創建一個新的feature分支,當該特性開發完畢,將此feature分支合并到develop分支。

創建一個新的feature分支,可以使用以下命令:

git flow feature start test

執行以下命令后,feature/test分支會被創建。

當特性開發完畢,需要將此分支合并到develop分支,可以使用以下命令實現:

git flow feature finish test

上面的命令會將feature/test分支的內容merge到develop分支,并將feature/test分支刪除。

feature分支只是存在于本地倉庫,如果需要多個人共同開發此特性,也可以將feature分支推送到過程倉庫。

git flow feature publish test

feature 分支的生命周期持續到特性的開發完畢,當完成特性的開發,你可以使用git的分支管理命令將此feature分支刪除。

  • ④. Release

當完成了特性的開發,并且將feature分支上的內容merge到develop分支上,這時可以開始著手準備新版本的發布,release分支正是作為發布而開設的分支。

release分支基于develop分支,在同一時間只有一個release分支,其生命周期較短,只是為了發布而使用。這意味著,在release分支上,只是進行較少代碼修改,比如bug的修復,原有功能的完善等。不允許在release分支增加大的功能,因為這樣會導致release分支的不穩定,不利于發布的進行。

當release分支(例如,v.1.0)被創建出來后,develop分支可能正準備另一版本(例如,v.2.0),因此,當release分支merge回develop分支時,可能會出現沖突,需要手工解決沖突才能繼續merge。

通過以下命令來創建release分支:

git flow release start v.1.0

執行過完上面的命令,release分支release/v.1.0會被創建出來 ,并且切換到該分支。

當完成release分支功能的完善或者bug的修復后,執行以下命令來完成release分支:

git flow release finish v.1.0

這個命令會執行以下的操作:

分支release/v.1.0 merge回master分支

使用release/v.1.0分支名稱打tag

分支release/v.1.0 merge回develop分支

刪除release/v.1.0分支

  • ⑤. Hotfix

當發現master分支出現一個需要緊急修復的bug,可以使用hotfix分支。hotfix分支基于master分支,用來修復bug,當完成bug的修復工作后,需要將其merge回master分支。

同一時間只有一個hotfix分支,其生命周期較短。

可以使用以下命令來創建hotfix分支:

git flow hotfix start v.1.0

使用以下命令來結束hotfix分支的生命周期:

git flow hotfix finish v.1.0

這句命令會將hotfix分支merge到master分支和release分支,并刪除該hotfix分支。

值得注意的是,如果bug修復時,正存在著release分支,那么hotfix分支會merge到release分支,而不是develop分支。

可以使用下圖來說明git flow這幾分支的常用命令:

git flow commands


結束語:
在開發的整個階段,只有兩個主分支貫穿于整個開發階段:master分支和develop分支。功能特性的開發以及bug的修復都通過創建新的分支來實現,且這些分支的生命周期都比較短暫。開發成員之間的開發可以做到盡量不干擾對方,這保證了代碼的穩定性。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,460評論 6 538
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,067評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,467評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,468評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,184評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,582評論 1 325
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,616評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,794評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,343評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,096評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,291評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,863評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,513評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,941評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,190評論 1 291
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,026評論 3 396
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,253評論 2 375

推薦閱讀更多精彩內容