本文介紹我一年前在自己的專案(包括工作專案和私人專案)中引入的git分支模式,這個模式很成功。
主要分支
**倉庫中有兩個長期的分支:
●master
●develop
master用作生產分支,裡面的**是準備部署到生產環境的。
develop是可交付的開發**,也可以看成是用於整合分支,每晚構建從develop獲取**。
當develop分支中的**足夠穩定的時候,就將改動合併到master分支,同時打上乙個標籤,標籤的名稱為發布的版本號。
輔助分支
通過輔助分支來幫助並行開發,和主要分支不同,這些分支的生命週期是有限的:
●特性分支
●發布分支
●緊急修復分支
特性分支
特性分支可能從develop分支分出,最終必須合併回develop。
特性分支(也叫主題分支)用於開發新特性。每個新特性開乙個新分支,最終會合併回develop(當特性開發完畢的時候),或者放棄(如果最終決定不開發這個特性)。
特性分支只存在於開發者的倉庫中。
建立乙個特性分支
從develop分支分出:
合併回develop$ git checkout -b myfeature develop
完成的特性需要合併回develop:
使用--no-ff確保總是新生成乙個提交,避免丟失曾經存在乙個特性分支的歷史資訊,也能夠方便地看出哪些提交屬於同乙個特性。比較:$ git checkout develop$ git merge --no-ff myfeature$ git branch -d myfeature$ git push origin develop
![merge --no-ff]
發布分支
發布分支可能從develop分出,最終必須合併回1develop和master。發布分支以release-*的方式命名。
發布分支為新的發布版本作準備,包括一些小bug的修正和發布的元資訊(版本號、發布日期等)的新增。這樣develop分支就可以接受針對以後的發布的新特性。
在**基本可以發布的時候從develop分支分出發布分支。這時要確保此次發布包括的特性都已經合併到develop分支了(同時,為下一版發布準備的特性不能合併到develop分支,必須等待發布分支分出後才能合併)。
建立發布分支
bump-version.sh是乙個指令碼,修改相應檔案的資訊,以體現版本號已經改變了。$ git checkout -b release-1.2 develop$ ./bump-version.sh 1.2$ git commit -a -m "bumped version number to 1.2"
完成發布分支
當發布分支中的**可以發布的時候,將**合併到master分支,並打上相應的標籤。同時還需要合併到develop分支,因為發布分支裡可能包含一些修正bug的**,合併回去可以確保以後的版本也包含這些修正。
注意,合併回develop分支很可能導致合併衝突,我們需要手工修復一下,然後提交。之後可以刪除發布分支:$ git checkout master$ git merge --no-ff release-1.2$ git tag -a 1.2$ git checkout develop$ git merge --no-ff release-1.2
緊急修復分支$ git branch -d release-1.2
可能從master分出,必須合併回develop和master。分支名以hotfix-*開頭。
緊急修復分支和發布分支很像,只不過它們是意料之外的。如果生產系統裡有乙個緊急的bug,必須馬上修復的話,我們就從master裡分出乙個緊急修復分支。
這樣,某個人修復緊急bug的同時,團隊其他成員可以繼續在develop分支上開發。
建立緊急修復分支
修復bug並提交$ git checkout -b hotfix-1.2.1 master$ ./bump-version.sh 1.2.1$ git commit -a -m "bumped version number to 1.2.1"
完成緊急修復分支$ git commit -m "fixed severe production problem"
修復bug之後,需要合併回master,同時也需要合併回develop。
以上情況假定不存在發布分支。假設存在發布分支的話,**不應該合併回develop,而應該合併回發布分支,確保正在準備的發布分支也能收到這個補丁(由於發布分支最終會合併到develop,因此這時不用再另外合併到develop)。$ git checkout master$ git merge --no-ff hotfix-1.2.1$ git tag -a 1.2.1$ git checkout develop$ git merge --no-ff hotfix-1.2.1
最後,刪除這個緊急修復分支:
$ git branch -d hotfix-1.2.1
來自:segmentfault
git最佳實踐
git config global user.name john doe git config global user.email johndoe example.com 在合併時會出現衝突,這時需要手動解決衝突,並提交。衝突產生後,衝突檔案會顯示以下標記 與 之間是本地修改的內容,與 之間是遠端修...
git分支實踐
本文基於這樣乙個場景 有多個新功能並行開發,按先後順序上線,但是偶爾會出現正在測試的版本暫停上線,另外乙個緊急功能需要優先上線。本文分享乙個用git分支來管理這樣的場景。本文基於 主要分支 倉庫中有兩個長期的分支 master用作生產分支,裡面的 是準備部署到生產環境的。develop是可交付的開發...
git 分支管理實踐
如圖步驟1,master對開發者只有讀許可權,開發者從master拉取並新建feature x分支進行開發 如圖步驟2,開發完成後,提測時,基於feature x分支新建release 1 0 0分支,並把其它feature分支合併到release 1 0 0分支中。如圖步驟3,release 1 ...