無規矩不成方圓,可是規矩太多了,則感受到束縛。咱們一我的工做的時候喜歡無拘無束,想怎麼幹就怎麼幹,沒有人評判,沒有人檢驗。時間久了就會盲目自大,覺得增刪改查熟悉業務就可以搞定一些。可是當項目逐漸擴大,原來的靈活逐漸變成了混亂,原來的快速迭代由於過於隨意的代碼,而開發進度遲遲不前。掌握一種規範,便在處理相似問題的時候有章可循,也可以快速的融入一個團隊。另外所謂規範,能夠說是比較好的實踐,按照規範來,項目也能穩健的發展。html
Git Flow 就是如何使用git 分支的一種規範,或者叫作推薦。git
根據Git Flow 的推薦,咱們要將Git 的分支分爲 master
、develop
、hotfix
、release
、feature
這五個分支。各類分支分別負責不一樣的功能,平時開發的時候各司其職,所以會有比較小的衝突率。那麼能夠用這些減小衝突的時間,少加會班,多有點本身的生活豈不快哉。一圖勝千言:github
master 分支主要方穩定、隨時可上線的版本。這個分支只能從別的分支上合併過來,通常來說,從develop 上合併,或者從bugfix 分支上合併過來。不能直接在master 分支上進行commit文件。由於是穩定的版本,因此每次版本發佈都要在這個分支上添加標籤
(tag)。工具
develop 分支是全部開發分支的母體,全部的開發分支都要從develop上切出來,開發完成以後最後都要合併到develop上。學習
hotfix 分支用來修復生產中的緊急bug,因爲develop分支尚處於開發過程當中,代碼不穩定,不能直接應用於生產。因此從master分支上切出一個分支,修復完成以後合併到master分支,而且合併到develop上。測試
release 分支能夠稱之爲預發佈的版本。當咱們認爲develop版本的代碼已經趨於成熟,咱們能夠打一個release分支。在release 分支上測試完成以後,要將代碼合併到master分支和develop上。master 分支是線上版本,而合併到develop版本是由於,在測試過程當中,一些細節的東西可能會修改,所以這些優化的內容也應該合併到最終版本以及開發版本中。優化
feature 分支是最常用的分支了。當咱們收到一個新的開發功能時,應該在develop分支上切出一個feature分支。用來完成新功能的開發,開發完成以後,要合併進develop分支上。命令行
基本上各類git的客戶端軟件都會支持Git Flow 工做模型。sourcetree 上使用git flow 工做模型就很流暢,體驗很好。可是爲了全平臺上通用,以及理解原理,快速上手。咱們來學習下Git Flow 的命令行操做。code
git flow 是一種git的使用規範,固然也有相應的工具集,命令行命令讓咱們使用。htm
安裝git flow
brew install git-flow-avh
初始化git flow 工具庫
git flow init 以後都按照默認的去配置,直接按enter鍵繼續。
增長feature新特性分支
適用場景,須要開發新功能
git flow feature start your roverliang/addlist
示例:
roverliang$ git flow feature start roverliang/addlist Switched to a new branch 'feature/roverliang/addlist' Summary of actions: - A new branch 'feature/roverliang/addlist' was created, based on 'develop' - You are now on branch 'feature/roverliang/addlist' Now, start committing on your feature. When done, use: git flow feature finish roverliang/addlist roverliang$ git branch develop * feature/roverliang/addlist master
完成新特性
這個動做執行的是下面的流程:
git flow feature finish roverliang/addlist
示例:
roverliang$ git flow feature finish roverliang/addlist Switched to branch 'develop' Your branch is up to date with 'origin/develop'. Already up to date. Deleted branch feature/roverliang/addlist (was 2e1b475). Summary of actions: - The feature branch 'feature/roverliang/addlist' was merged into 'develop' - Feature branch 'feature/roverliang/addlist' has been locally deleted - You are now on branch 'develop' roverliang$ git branch * develop master roverliang$
獲取一個發佈的新特性的分支
git flow feature track origin MYFEATURE
準備release 版本
git flow release start RELEASE [BASE] 你能夠選擇提供一個 [BASE]參數,即提交記錄的 sha-1 hash 值,來開啓動 release 分支. 這個提交記錄的 sha-1 hash 值必須是'develop' 分支下的。
示例:
roverliang$ git branch develop feature/test * master roverliang$ git log --pretty=oneline -3 2e1b475f9825275aefa0892cfe5259aaac9a3483 (HEAD -> master, origin/test2, origin/master, origin/feature/test, origin/develop, feature/test, develop) delte some content 2d22f306d2dca363b8aaa05743be342a505aabb0 renamed: demo.txt -> test.txt fbf025e210952c3cdb10e219c4ee5f82b9f36327 modified: demo.txt roverliang$
發佈release 版本
git flow release track RELEASE
完成release 版本
至關於執行如下幾個動做:
git flow release finish RELEASE
緊急修復的需求:
開始緊急修復,開啓hotfix 分支
git flow hotfix start VERSION [BASENAME] VERSION 參數標記着修正版本。你能夠從 [BASENAME]開始,[BASENAME]爲finish release時填寫的版本號
完成緊急修復
當完成緊急修復分支,代碼歸併回 develop 和 master 分支。相應地,master 分支打上修正版本的 TAG。
git flow hotfix finish VERSION
本文參考: