
用 git 有一段時間了,之前沒有詳細地了解 git flow,導致協(xié)作過程中或多或少出現(xiàn)了一些頭疼問題。最近靜下心來理了下 git flow 的整個流程,再回頭看開朗了不少,總結(jié)到這里。介紹的是一些常用的 git 基礎命令和 git flow,當然也很重要的,過程中自己在 Github 上建了一個模擬的 Demo 用來熟悉 git flow。其實從理解到動手完成還是有點距離的,笨人有笨法嘛。如有不準確的地方歡迎指正。: )
Git 常用命令
這里列出了一些比較常用的 git 命令,每個命令介紹后面都帶一個簡單例子~
1. 新開分支
$ git branch 新分支名
#新建分支 develop
$ git branch develop
2. 切換到另一個分支
$ git checkout 分支名
#切換到 develop 分支
$ git checkout develop
3. 新開分支并切換到新分支
$ git checkout -b 新分支名
#新開 develop 分支,并切換到此分支
$ git checkout -b develop
4. 查看分支列表
$ git branch -a
頭部帶 remotes/origin 的,表示遠程分支
5. 查看遠程分支列表
$ git branch -r
6. 向遠程倉庫提交本地新開的分支
$ git push origin 新開分支名
#提交新建的 develop 分支
$ git push origin develop
7. 刪除遠程分支
$ git push origin --delete 遠程分支名
#刪除遠程倉庫中的 develop 分支
$ git push origin --delete develop
8. 刪除本地分支
$ git branch -d 分支名
#刪除本地的 develop 分支
$ git branch -d develop
9. 更新分支列表信息
$ git fetch -p
用于協(xié)作時,項目隊友添加或刪除了遠程分支的分支,可以通過這種方式來刷新分支列表信息
Git Flow 梳理

Git 開發(fā)模式本質(zhì)上是一套流程,團隊每個成員遵守這套流程以確保完成可控的軟件開發(fā)過程。原文參考
1.主要分支
在遠程倉庫中有兩個主要分支的生命期可以無限長,分別是:
Master
Develop

master 分支(origin/master)
代碼倉庫中有且僅有的一條主分支,默認為 master ,在創(chuàng)建版本庫時會自動創(chuàng)建。所有提供給用戶使用的正式版本的源碼,都會在這個分支上發(fā)布。也就是說主分支 master 用來發(fā)布重大版本。
develop 分支(origin/develop)
日常開發(fā)工作都會在 develop 分支上面完成。develop 分支可以用來生成代碼的最新隔夜版本(nightly builds)。
創(chuàng)建 develop 分支
$ git checkout -b develop master
#push develop 到遠程倉庫
$ git push origin develop
當我們在develop上完成了新版本的功能,最終會把所有的修改 merge 到 master 分支。針對每次 master 的修改都會打一個 Tag 作為可發(fā)布產(chǎn)品的版本號。
2.輔助分支
開發(fā)過程中不可能項目人所有都在一個 develop 分支中開發(fā),版本管理會很混亂。所以除了主要分支外,我們還需要一些輔助分支來協(xié)助團隊成員間的并行開發(fā)。
所用到的輔助分支大體分三類:
- Feature branches(功能分支)
- Release branches(預發(fā)布分支)
- Hotfix branches(熱修復分支)
通過分支名我們能知道各類型分支都有特定作用,對于他們各自的起始分支和最終的合并分支也都有嚴格規(guī)定。呼,雖然可能會麻煩點,但讓人一目了然的效果還是很誘人的。
下面逐一介紹下各類型分支的創(chuàng)建使用和移除方法,過程中我在 Github 中創(chuàng)建一個虛擬的項目用來熟悉整個流程,或許你也可以像我一樣做一遍。哈,動手總會有意外收獲嘛。廢話少說,繼續(xù)正題~
2.1.Feature branches(功能分支)

應用場景:
當要開始一個新功能的開發(fā)時,我門可以創(chuàng)建一個 Feature branche 。等待這個新功能開發(fā)完成并確定應用到新版本中就合并回 develop,那么如果不是就會被很遺憾的丟棄。。。
應用規(guī)則:
從
develop分支創(chuàng)建,最終合并回develop分支;分支名:feature/*;
Tips:這里很多地方說用 feature-* 的方式命名,因為公司項目中用的 feature/*方式,也就習慣了,其實意思是一樣的。
(1).Creat a feature branch
$ git checkout -b feature/test develop
do something in feature/test branch
push 本地 feature/test 到遠處代碼庫;
$ git push origin feature/test
(2).切換到 develop 合并 feature/test
$ git checkout develop
$ git merge --no-ff feature/test
"- -no-ff" 的作用是創(chuàng)建一個新的 "commit" 對象用于當前合并操作。這樣既可以避免丟失該功能分支的歷史存在信息,又可以集中該功能分支所有歷史提交。并且如果想回退版本也會比較方便。

(3).移除本地和遠程倉庫的 feature/test 分支
$ git branch -d feature/test
$ git push origin --delete feature/test
2.2.Release branches(預發(fā)布分支)
應用場景:
"Release branches" 用來做新版本發(fā)布前的準備工作,在上面可以做一些小的 bug 修復、準備發(fā)布版本號等等和發(fā)布有關(guān)的小改動,其實已經(jīng)是一個比較成熟的版本了。另外這樣我們既可以在預發(fā)布分支上做一些發(fā)布前準備,也不會影響 "develop" 分支上下一版本的新功能開發(fā)。
應用規(guī)則:
從
develop分支創(chuàng)建,最終合并回develop和master;分支名:release-*;
(1).Creat a release branch
$ git checkout -b release-1.1 develop
#push 到遠程倉庫(可選)
$ git push origin release-1.1
do something in release-1.1 branch
(2).切換到 master 合并 release-1.1
$ git checkout master
$ git merge --no-ff release-1.1
$ git tag -a 1.1
$ git push origin 1.1
當我們的 release-1.1 的 Review 完成,也就預示著我們可以發(fā)布了。打上相應的版本號,再 push 到遠程倉庫。
(3).切換到 develop 合并 release-1.1
預發(fā)布分支所做的修改同時也要合并回 develop
$ git checkout develop
$ git merge --no-ff release-1.1
(4).移除本地和遠程倉庫的 release-1.1
$ git branch -d release-1.1
$ git push origin --delete release-1.1
2.3.Hotfix branches(熱修復分支)

應用場景:
"Hotfix branches" 主要用于處理線上版本出現(xiàn)的一些需要立刻修復的 bug 情況.
應用規(guī)則:
從
master分支上當前版本號的tag處切出,也就是從最新的master上創(chuàng)建,最終合并回develop和master;分支名:hotfix-*;
(1).Creat a fixbug branch
$ git checkout -b fixbug-1.1.1 master
#push 到遠程倉庫(可選)
$ git push origin fixbug-1.1.1
do something in fixbug-1.1.1 branch
(2).切換到 master 合并 fixbug-1.1.1
$ git checkout master
$ git merge --no-ff fixbug-1.1.1
$ git tag -a 1.1.1
$ git push origin 1.1.1`
bug 修復完成,合并回 master 并打上版本號;
(3).切換到 develop 合并 fixbug-1.1.1
$ git checkout develop
$ git merge --no-ff fixbug-1.1.1
(4).移除本地和遠程倉庫的 fixbug-1.1.1
$ git branch -d fixbug-1.1.1
$ git push origin --delete fixbug-1.1.1
總結(jié)
啊哈,又到尾聲了。上面的 Git 常用命令和 Git Flow 只是一些基本常識,并沒有什么新的東西加入。在平時的團隊協(xié)作中有些對于我自身而言還是比較新鮮的,比如 tag ,這些一般都交給老大來弄(因為他要 review):D 。好像跑偏了。。。對自己而言,理一遍后的收獲還是不小的,對 Git Flow 的整個流程有了大概的了解,但具體每個 git 命令內(nèi)部是怎么處理的呢,這個留到后面再梳理一下~
參考內(nèi)容:
Git分支管理策略
A successful Git branching model
戳這里前往我的小屋 I'm Jony :-D