git --- 開發時關於git分支控制的一些心得(master-hotfix-develop-release)

項目代碼正在重構,原來爲了個人開發方便,都是從master分支(或一箇中間分支)上建立一個自己的分支用於開發,開發完畢後將自己的分支merge到master分支(或一箇中間分支),結束自己的分支。

在大量的提交後,會導致一些問題:

  1. 並沒有版本上的控制,看起來就像一個版本一直在開發一樣,不存在一個穩定的版本分支(或者master分支落後很多)。
  2. 個人的分支沒有得到很好的測試,合併到master分支上可能有一些隱藏bug,導致master分支一直都處於不穩定的狀態,出現棘手的問題時無法回退到一個穩定版本。
  3. 每個人的開發進度不一樣,在merge到master分支時導致很多衝突。
  4. 在排查錯誤時,由於merge參數不統一導致master分支上有超級多的commit,只能在master分支上一點一點的回退版本,執行起來很麻煩。
  5. 個人的分支上傳到GitHub上,導致遠程倉庫的分支雜亂無章。

參考了一個成功的git分支模型,對現在的git分支管理進行一些調整,便於規範開發。以本人目前開發的項目爲例,項目名是visom-server。

  1. 一共有五種分支:master、hotfix、develop、release、self分支。master分支是一個主分支,主要提供一個穩定的版本,時刻都是穩定的保證隨時可以上線應用。develop分支是一個和master分支並行的分支,用於主開發的分支。hotfix分支是熱修復分支,主要用於修復master分支出現的意料之外的bug,屬於臨時分支,命名以"hotfix-xxx"爲準。release分支是發佈版本分支,在develop開發完成後做一些版本信息的或細節調整的分支,也屬於臨時分支,命名以"release-xxx"爲準,xxx表示版本號。self分支是個人開發用的分支,命名無特殊要求。
  2. master、develop分支是核心分支,是並行的一直存在在遠程倉庫的分支,分別提供穩定版本和主開發的作用。下面說一下完整的開發流程。整個流程相對於上面的參考博客比較,關於版本號的自動創建、規範以及其他版本相關的內容還沒有完全吃透,所以對這部分和不適合本人公司開發情況的會有些刪減,大家可以多提供意見,謝謝。(本人是使用vscode開發的,有些命令可以用vscode功能代替,比如創建、切換分支等)

master、develop分支

  1. 首先基於master分支建立一個develop分支,並將develop分支push到遠程倉庫裏,做爲開發的核心分支。
>git checkout -b develop master
>git push
  1. 基於develop分支建立自己的分支,做一些開發改動,完成後merge到develop分支而不是master分支。develop分支上有每一次改動提交的記錄,所以注意merge時的參數。
>git checkout -b zhengsy develop // 基於develop分支創建並切換到zhengsy分支(自己開發的分支)
>git commit -a -m '修復project.index傳參bug'  //開發代碼後,將所有改動儲存到本地並加以描述(分多次提交)
>git checkout develop // 切換到develop分支
>git merge --no-ff zhengsy //將zhengsy分支毫無保留的融合到develop分支
>git branch -d zhengsy // 刪除zhengsy分支
// 整個過程中自己的分支並沒有推送到遠程倉庫只存在與自己的本地。
// 如果有問題需要協助請推送到遠程倉庫,最後完成開發任務時請刪除遠程分支。

hotfix分支

master分支遇到緊急修復的bug時,請使用hotfix分支。hotfix分支也不會出現在遠程倉庫,只是一個本地的臨時分支,融合時請保留提交記錄。具體流程如下:

>git checkout -b hotfix-indexbug master // 基於master分支建立一個hotfix-indexbug分支,用於緊急修復
>git commit -a -m '修復index傳參bug'  // 修復後,將所有改動儲存到本地並加以描述(因爲master分支是穩定的出現bug,也改動不大,一次性提交即可)
>
>更新master分支!!!!
>git checkout master // 切換到master分支(版本是v1.0.0)
>git merge --no-ff hotfix-indexbug // 將hotfix-indexbug分支融合到master分支
>git tag -a v1.0.1 -m '修復index的bug' // 在本地有打一個版本的標籤。(作用不是很明顯)
>
>更新develop分支!!!!
>git check develop // 切換到develop分支
>git merge --no-ff hotfix-indexbug // 將hotfix-indexbug分支融合到develop分支
>
>刪除hotfix分支
>git branch -d hotfix-indexbug

release分支(暫時作用不明顯)

develop分支完成了版本升級任務,即可以給master分支提供下一個穩定版本時,請使用release分支。可能因爲develop分支已經完成了該版本開發任務,可以執行下一個開發版本任務了,但爲了使開發人員和版本維護人員可以並行,即開發人員繼續使用develop分支開發下一個版本,版本維護人員使用release分支撰寫該版本的一些信息和應付一些意料不到的小問題,所以使用release分支作爲中轉。使用release分支和hotfix分支類似,就不再重複命令了,注意分支命名規範。

有一點需要特殊說明的是,release分支融合到master分支時,請使用–squash參數;release分支融合到develop分支時,請使用–no-ff參數。即:

>// 將release-xxx分支融合到master分支
>git checkout master
>git merge --squash release-xxx
>
>// 將release-xxx分支融合到develop分支
>git checkout develop
>git merge --no-ff release-xxx

以上就是本人的一點心得,仍有不完善的地方比如版本說明方面的說明等,感覺版本方面還是使用GitHub上那種的比較好,即完成一個版本就在GitHub上生成一個版本,自己的本地tag更多的是自己方便一些。歡迎大家多提意見。以後有更完善的方案再來補充。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章