Git FLow是什么
Git Flow是構(gòu)建在Git之上的一個組織軟件開發(fā)活動的模型,也是軟件開發(fā)過程中一種成功的分支管理策略。它的核心思想是利用成功的分支管理策略,管理軟件的開發(fā)過程。
2010年5月,nvie 在他的“A successful Git branching model”一文中,介紹了這種模型,并將其命名為Git Flow。而且,他還為這種分支策略開發(fā)了一套Git擴展工具,我們可以在Git中,使用專屬的分支管理命令操作分支。
因此,Git Flow 是一種軟件開發(fā)模型,由一種分支管理策略,和一套與之配套的Git擴展工具組成。
下面這張圖,形象的展示了Git Flow的全貌:
Git Flow中的分支
根據(jù)Git Flow的思想,開發(fā)人員需要合理的利用Git的分支功能,來管理軟件的開發(fā)流程。因此,Git FLow模型定義了五種標(biāo)準(zhǔn)的分支,并且讓它們各司其職,分別是:master分支,develop分支,feature分支,hotfix分支和release分支。
這五種分支又可分為兩大類:主要分支和輔助分支。主要分支,包括master分支和develop分支。輔助分支,包括feature分支,hotfix分支和release分支。
實質(zhì)上,Git Flow就是要求開發(fā)者使用這五種標(biāo)準(zhǔn)的分支管理軟件開發(fā)流程。
主要分支
主要分支只用于與軟件測試、部署、發(fā)布相關(guān)的活動,不會涉及任何的軟件開發(fā)活動。主要分支會一直存在,是所有其他分支的源頭,也是它們最終的歸宿。

-
master
master分支上存放的應(yīng)該是隨時可供在生產(chǎn)環(huán)境中部署的代碼(Production Ready state)。它是源頭中的源頭,歸宿中的歸宿。它只用于新版本的發(fā)布,不涉及一切與軟件開發(fā)、測試、部署有關(guān)的操作。 -
develop
develop分支fork自master分支,主要用于開發(fā)工作。開發(fā)新功能時,從develop分支拉出feature分支。新功能開發(fā)完成后,再把feature分支合并到develop分支??梢姡琩evelop分支是一個承上啟下的分支。
輔助分支
輔助分支主要用于具體的軟件開發(fā)工作,包括新功能的開發(fā)、Bug修復(fù)和發(fā)布前的準(zhǔn)備工作。輔助分支不是一直存在的,當(dāng)它們被合并到主要分支后,會被刪除掉。
-
feature
開發(fā)者不能直接在master分支和develop分支上做開發(fā)工作,這樣可能會污染軟件的版本庫。Git Flow要求從develop分支上引出一條feature分支,專門做具體的開發(fā)工作。每個開發(fā)者都可以從develop分支上引出自己的feature分支,并且這個feature分支是開發(fā)者私有的,可以不必提交到版本庫中。開發(fā)完成后,把所有的feature分支都合并到develop分支上,然后把feature分支刪掉。如果新功能被砍掉了,也可以直接刪掉feature分支。
-
hotfix
當(dāng)線上產(chǎn)品遇到了嚴(yán)重Bug,或者發(fā)現(xiàn)了緊急的缺陷,不得不立即修復(fù)時,就可以從master分支引出一條hotfix分支。問題解決后,再把hotfix分支合并到master分支和develop分支,最后刪除掉這個hotfix分支。
這樣做的好處是使Bug修復(fù)與新功能開發(fā)完全分離開,保證開發(fā)工作不受到影響。
-
release
當(dāng)新功能開發(fā)完,代碼都合并到develop分支后,就可以為新版本發(fā)布做準(zhǔn)備了。但是如果這時有新的開發(fā)任務(wù)到來,或者又有新的分支需要合并,而此時的develop分支又沒有準(zhǔn)備好合并到master分支時,那么就可以從develop分支引出一條release分支作為過渡。在release分支上,完成發(fā)布前的準(zhǔn)備工作,然后合并到master分支和develop分支,最后刪除release。
release分支可以使develop分支解放出來,盡早的投入到下一版本的開發(fā)中。
Git FLow的使用方式
-
使用原生的Git命令
Git Flow本質(zhì)上就是對git分支的利用,所以用原生的git分支命令就可以操作。-
創(chuàng)建分支
從當(dāng)前分支上引出新的分支git branch branch_name -
切換分支
git checkout branch_name -
創(chuàng)建并切換分支
git checkout -b branch_name -
合并分支
把其他分支合并到當(dāng)前分支git merge --no-ff -m "comment" branch_name -
刪除分支
-
要想刪除一個分支,必須在已經(jīng)合并了那個分支的分支上執(zhí)行刪除操作。
git branch -d banch_name -
強制刪除一個分支
git branch -D branch_name
-
-
查看所有分支
git branch -
如果本地沒有遠(yuǎn)程倉庫的某個分支,把遠(yuǎn)程分支拉取到本地,并且建立連接
git checkout -b branch_name orign/branch_name -
從遠(yuǎn)程分支更新本地分支
git pull -
推送分支到遠(yuǎn)程分支
把本地分支的更新推送到遠(yuǎn)程分支(需要先建立連接);或者在遠(yuǎn)程倉庫?沒有此分支時,把本地分支?推送到遠(yuǎn)程倉庫git push origin branch_name -
使本地分支與遠(yuǎn)程分支建立連接
git branch --set-upstream branch_name origin/branch_name
-
-
刪除遠(yuǎn)程倉庫的分支
git push origin --delete branch_name
-
使用 nvie 開發(fā)的Git Flow工具
nvie為Git Flow提供了一套命令行工具,使用它可以更方便的操作Git Flow.-
初始化Git Flow
git flow init- 在一個git倉庫中初始化git flow,會彈出一系列提示信息,跟著做就行了。
- 在一個非git倉庫的文件夾中初始化,會創(chuàng)默認(rèn)建好需要的分支,沒有任何提示
-
創(chuàng)建feature/release/hotfix/support分支
初始化Git Flow會自動創(chuàng)建/指定主要分支,但輔助分支需要開發(fā)者手動創(chuàng)建。-
查看/創(chuàng)建/完成feature分支
git flow feature git flow feature start feature_branch_name git flow feature finish feature_branch_namestart命令,會創(chuàng)建一個新的feature分支;finish命令,會自動合并feature分支到develop分支和master分支,并刪除feature分支。
-
push/pull一個feature分支到遠(yuǎn)程倉庫
git flow feature publish feature_branch_name git flow feature pull origin feature_branch_name 其他分支 - hotfix/release/support分支的操作與feature分支基本相同,直接去參考官方文檔吧。
-
-
參考文獻(xiàn):
撤銷更改
git checkout -- file 在加入到暫存區(qū)之前,遺棄修改
git reset HEAD file 在提交之前,遺棄暫存區(qū)的更改
git reset --hard HEAD^ 回退到上一版本
git reset --hard commit_id 回退到指定的版本
操作文件
git mv file newfile 重命名,文件名不區(qū)分大小寫
git rm file 刪除文件
git remote rename repo new_repo 重命名遠(yuǎn)程倉庫