我理解的Git Flow

Git FLow是什么

Git Flow是構建在Git之上的一個組織軟件開發活動的模型,也是軟件開發過程中一種成功的分支管理策略。它的核心思想是利用成功的分支管理策略,管理軟件的開發過程。

2010年5月,nvie 在他的“A successful Git branching model”一文中,介紹了這種模型,并將其命名為Git Flow。而且,他還為這種分支策略開發了一套Git擴展工具,我們可以在Git中,使用專屬的分支管理命令操作分支。

因此,Git Flow 是一種軟件開發模型,由一種分支管理策略,和一套與之配套的Git擴展工具組成。

下面這張圖,形象的展示了Git Flow的全貌:

Git Flow中的分支

根據Git Flow的思想,開發人員需要合理的利用Git的分支功能,來管理軟件的開發流程。因此,Git FLow模型定義了五種標準的分支,并且讓它們各司其職,分別是:master分支,develop分支,feature分支,hotfix分支和release分支。

這五種分支又可分為兩大類:主要分支輔助分支。主要分支,包括master分支和develop分支。輔助分支,包括feature分支,hotfix分支和release分支。

實質上,Git Flow就是要求開發者使用這五種標準的分支管理軟件開發流程

主要分支

主要分支只用于與軟件測試、部署、發布相關的活動,不會涉及任何的軟件開發活動。主要分支會一直存在,是所有其他分支的源頭,也是它們最終的歸宿。

  • master

    master分支上存放的應該是隨時可供在生產環境中部署的代碼(Production Ready state)。它是源頭中的源頭,歸宿中的歸宿。它只用于新版本的發布,不涉及一切與軟件開發、測試、部署有關的操作。
  • develop

    develop分支fork自master分支,主要用于開發工作。開發新功能時,從develop分支拉出feature分支。新功能開發完成后,再把feature分支合并到develop分支。可見,develop分支是一個承上啟下的分支。

輔助分支

輔助分支主要用于具體的軟件開發工作,包括新功能的開發、Bug修復和發布前的準備工作。輔助分支不是一直存在的,當它們被合并到主要分支后,會被刪除掉。

  • feature

    開發者不能直接在master分支和develop分支上做開發工作,這樣可能會污染軟件的版本庫。Git Flow要求從develop分支上引出一條feature分支,專門做具體的開發工作。每個開發者都可以從develop分支上引出自己的feature分支,并且這個feature分支是開發者私有的,可以不必提交到版本庫中。開發完成后,把所有的feature分支都合并到develop分支上,然后把feature分支刪掉。如果新功能被砍掉了,也可以直接刪掉feature分支。

  • hotfix

    當線上產品遇到了嚴重Bug,或者發現了緊急的缺陷,不得不立即修復時,就可以從master分支引出一條hotfix分支。問題解決后,再把hotfix分支合并到master分支和develop分支,最后刪除掉這個hotfix分支。
    這樣做的好處是使Bug修復與新功能開發完全分離開,保證開發工作不受到影響。

  • release

    當新功能開發完,代碼都合并到develop分支后,就可以為新版本發布做準備了。但是如果這時有新的開發任務到來,或者又有新的分支需要合并,而此時的develop分支又沒有準備好合并到master分支時,那么就可以從develop分支引出一條release分支作為過渡。在release分支上,完成發布前的準備工作,然后合并到master分支和develop分支,最后刪除release。
    release分支可以使develop分支解放出來,盡早的投入到下一版本的開發中。

Git FLow的使用方式

  • 使用原生的Git命令

    Git Flow本質上就是對git分支的利用,所以用原生的git分支命令就可以操作。
    • 創建分支
      從當前分支上引出新的分支

        git branch branch_name
      
    • 切換分支

        git checkout branch_name
      
    • 創建并切換分支

        git checkout -b branch_name
      
    • 合并分支
      把其他分支合并到當前分支

        git merge --no-ff -m "comment" branch_name
      
    • 刪除分支

      • 要想刪除一個分支,必須在已經合并了那個分支的分支上執行刪除操作。

          git branch -d banch_name
        
      • 強制刪除一個分支

          git branch -D branch_name
        
    • 查看所有分支

        git branch
      
    • 如果本地沒有遠程倉庫的某個分支,把遠程分支拉取到本地,并且建立連接

        git checkout -b branch_name orign/branch_name
      
    • 從遠程分支更新本地分支

        git pull
      
    • 推送分支到遠程分支
      把本地分支的更新推送到遠程分支(需要先建立連接);或者在遠程倉庫?沒有此分支時,把本地分支?推送到遠程倉庫

        git push origin branch_name
      
    • 使本地分支與遠程分支建立連接

        git branch --set-upstream branch_name origin/branch_name
      
  • 刪除遠程倉庫的分支

         git push origin --delete branch_name
    
  • 使用 nvie 開發的Git Flow工具

    nvie為Git Flow提供了一套命令行工具,使用它可以更方便的操作Git Flow.
    • 初始化Git Flow

        git flow init
      
      • 在一個git倉庫中初始化git flow,會彈出一系列提示信息,跟著做就行了
      • 在一個非git倉庫的文件夾中初始化,會創默認建好需要的分支,沒有任何提示
    • 創建feature/release/hotfix/support分支
      初始化Git Flow會自動創建/指定主要分支,但輔助分支需要開發者手動創建。

      • 查看/創建/完成feature分支

          git flow feature
          git flow feature start feature_branch_name
          git flow feature finish feature_branch_name
        

        start命令,會創建一個新的feature分支;finish命令,會自動合并feature分支到develop分支和master分支,并刪除feature分支。

      • push/pull一個feature分支到遠程倉庫

          git flow feature publish feature_branch_name
          git flow feature pull origin feature_branch_name
        
      • 其他分支 - hotfix/release/support分支的操作與feature分支基本相同,直接去參考官方文檔吧。

參考文獻:

  1. 基于git的源代碼管理模型——git flow
  2. Git 常用命令和 Git Flow 梳理
  3. Git flow 分支策略
  4. Git Flow在github的主頁
撤銷更改

git checkout -- file 在加入到暫存區之前,遺棄修改
git reset HEAD file 在提交之前,遺棄暫存區的更改
git reset --hard HEAD^ 回退到上一版本
git reset --hard commit_id 回退到指定的版本

操作文件

git mv file newfile 重命名,文件名不區分大小寫
git rm file 刪除文件
git remote rename repo new_repo 重命名遠程倉庫

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,321評論 6 543
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,559評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,442評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,835評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,581評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,922評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,931評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,096評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,639評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,374評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,591評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,104評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,789評論 3 349
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,196評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,524評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,322評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,554評論 2 379

推薦閱讀更多精彩內容