2010年人家寫的,(2010年我還不認識git)。原文在這http://nvie.com/posts/a-successful-git-branching-model/git
做者以本身的項目經驗,畫了一個圖,以下,全文都是以據這個圖來講的。工具
中間講了爲啥用git,爲啥,每一個人理解都不同,講也白講,乾脆不講。而後說,他們怎麼用git的。post
他說,他們在開過程當中,用到5類分支,哪5類(所謂分類只是從功能名字上區分,git branch是平等的)測試
1,master日誌
2,develop開發
以上兩個,他們又被稱爲,主分支it
3,featureast
4,release基礎
5, hotfixmodel
這三個又被稱爲,支持分支
而後講,這幾個分支是幹啥用到,何時建立。
1,master 分支,項目開始的始祖分支。項目不死,它就不滅。其餘分支都是它的子孫分支。
這個分支上的代碼是隨時可上發生產,打tag的分支。不建議直接修改。只能由其餘分支把代碼合併上來。
2, develop 分支,它上面的代碼老是,下個版本(有release版本號的)最新的代碼。能夠理解爲,按項目計劃主要功能的開發分支。也是CI工具的集成測試分支。每當這個分支上的代碼測試完,能夠上生產了,就須要先合併到master分支,指定一個版本號,打個tag。顯然,它也是項目不死,這個分支就一直存在。
3, feature 分支,首先它是從develop分支拉出的分支,主要開發一些新功能,但這個功能何時上線,或發佈在哪一個版本上還不肯定。反正單獨開個分支,慢慢弄吧。還有,可能最後不被採用都有可能,而後分支刪除。若是被採用了,首先要合併到develop分支。而後仍是刪除這個分支。因此相對主分支,它是個短命的分支,開發完成,或者最後決定拋棄,就刪除了。最後他還說,在合併 feature 到develop時,你用
git merge --no-ff myfeature
命令,其中加上--on-ff,和不加--on-ff區別以下圖,主要是看日誌時,知道有個 feature 分支存在過,方便看 feature 日誌。
4,release 分支,這個分支也是從develop分支拉出來,而且必須合併回develop分支去的,能夠命名爲
release-*。release分支其實就是爲立刻要分佈的新版本準備的,支持隨時測試,一些小bug的修復,作些新版本發佈的基礎數據的準備等。拉release分支講究一個時間點。說,必須在全部準備在這個版本發佈的feature分支代碼都已經合併到develop分支後,而且develop分支上已經開發完成了,準備着個版本上的新功能,但可能此次發佈的具體版本號尚未定下來的時候。你能夠拉個 release分支 。也就是說,每次發佈新版本前,都拉個realease分支來作測試發佈。他說,這樣作,能夠保證develop分支能夠繼續接受別人新的代碼。最後要先合併到maseter,而後打tag發佈;
5,Hotfix 分支,命名能夠是hotfix-*,這個分支是從master分支拉出的分支,這個分支和release分支類似的是,它也是準備發佈生成環境的分支,只是它是因爲,線上一個緊急須要解決的bug所引起的發佈分支。它是master分支上對應生產環境版本的tag上拉取的分支。這個分支發佈後,要同時合併到develop和master分支上。最後就能夠刪除這個分支了。 這樣作,也是能夠保證develop分支能夠繼續接受別人新的代碼 ,不至於 develop 開發被阻塞。