接前篇git版本控制開發流程小結筆記(一),咱們接着展現其餘的開發流程。git
那麼接下來,完成了幾個功能點的開發以後,develop分支已經達到了一個能夠發佈的狀態,顯然按照傳統的流程咱們首先要通過一個預發的流程。那咱們,咱們將最新的develop分支拉出來成爲一個release分支,暫且取名爲release1。shell
$ git checkout -b release1 Switched to a new branch 'release1' $ echo "some release configurations" >> release.config $ ls 1.txt 2.txt release.config
爲了展現須要,這裏寫了一個release.config文件,咱們假設它就是預發時候的一些環境配置,而後commit掉。網絡
$ git add -A $ git commit -m 'release1' [release1 c005f04] release1 1 file changed, 1 insertion(+) create mode 100644 release.config
考慮最一般的狀況,預發的時候可能遇到一些預發環境下的bug,這個時候我就直接在release分支下進行修復演進,若是bug問題很大,則須要從新併入develop中,拉出新的feature進行開發重構。下面演示直接在release分支下進行bug fixs。假設是1.txt出現了問題,咱們將feature1字符串修改成feature1+。svn
$ echo "feature1+" > 1.txt $ git add -A $ git commit -m 'release1 bug fix' [release1 661497f] release1 bug fix 1 file changed, 1 insertion(+), 1 deletion(-)
好了,預發環境終於一切正常了,下面就是激動人心的線上發佈。這裏咱們須要將release分支同時併入master分支和develop分支,master分支供線上發佈,develop分支供下次開發演進。測試
$ git checkout master Switched to branch 'master' $ git merge release1 Updating 26a17c8..661497f Fast-forward 1.txt | 1 + 2.txt | 2 ++ release.config | 1 + 3 files changed, 4 insertions(+) create mode 100644 release.config $ git checkout develop Switched to branch 'develop' $ git merge release1 Updating f5cb288..661497f Fast-forward 1.txt | 2 +- release.config | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 release.config
好了,一切大功告成。讓咱們來看一下分支節點網絡圖。spa
由圖可見,develop,master,release1三個分支的head已經指向同一個節點,work tree已經保持一致。.net
咱們常常會碰到一些線上意想不到的bug,須要緊急修復。這時,咱們就直接從master分支拉出hotfixes分支進行修復,這裏咱們假設線上出現了bug的問題在於1.txt的feature1+字符串的+號,咱們須要刪除掉+號,咱們拉出hotfix1分支進行修改。版本控制
$ git checkout master Switched to branch 'master' $ git checkout -b hotfix1 Switched to a new branch 'hotfix1' $ echo "feature1" > 1.txt $ git add -A $ git commit -m 'hotfix1' [hotfix1 17692cc] hotfix1 1 file changed, 1 insertion(+), 1 deletion(-)
bug修復完畢,測試經過後咱們將分支合併到master和develop中去。code
$ git checkout develop Switched to branch 'develop' $ git merge hotfix1 Updating 661497f..17692cc Fast-forward 1.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) $ git checkout master Switched to branch 'master' $ git merge hotfix1 Updating 661497f..17692cc Fast-forward 1.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
注意這裏可能出現的狀況就是,因爲develop分支仍在開發,因此可能出現hotfix分支合併到develop分支發生衝突的狀況,這個時候我就須要處理一下衝突啦。好了,完成這些步驟以後,咱們就順利地修復完了線上bug,一切迴歸正常。讓咱們來看一下分支節點網絡圖。blog
總得而言,博主認爲git的開發流程仍是很是清晰簡單的,因爲git方便的branch機制,咱們能夠不像之前使用svn那樣單純的整個項目copy的方法去拉分支進行開發,同時清晰的節點網絡圖也更加有利於項目的迭代。所以不再會svn混亂了目錄結構和開發流程而讓項目的熵值愈來愈大了!!