用 git 有一段時間了,以前沒有詳細地瞭解 git flow,致使協做過程當中或多或少出現了一些頭疼問題。最近靜下心來理了下 git flow 的整個流程,再回頭看開朗了很多,總結到這裏。介紹的是一些經常使用的 git 基礎命令和 git flow,固然也很重要的,過程當中本身在 Github 上建了一個模擬的 Demo 用來熟悉 git flow。其實從理解到動手完成仍是有點距離的,笨人有笨法嘛。若有不許確的地方歡迎指正。: )git
這裏列出了一些比較經常使用的 git 命令,每一個命令介紹後面都帶一個簡單例子~github
$ git branch 新分支名
#新建分支 develop
$ git branch develop
$ git checkout 分支名
#切換到 develop 分支
$ git checkout develop
$ git checkout -b 新分支名
#新開 develop 分支,並切換到此分支
$ git checkout -b develop
$ git branch -a
頭部帶 remotes/origin 的,表示遠程分支ruby
$ git branch -r
$ git push origin 新開分支名
#提交新建的 develop 分支
$ git push origin develop
$ git push origin --delete 遠程分支名
#刪除遠程倉庫中的 develop 分支
$ git push origin --delete develop
$ git branch -d 分支名
#刪除本地的 develop 分支
$ git branch -d develop
$ git fetch -p
用於協做時,項目隊友添加或刪除了遠程分支的分支,能夠經過這種方式來刷新分支列表信息bash
Git 開發模式本質上是一套流程,團隊每一個成員遵照這套流程以確保完成可控的軟件開發過程。原文參考post
在遠程倉庫中有兩個主要分支的生命期能夠無限長,分別是:fetch
Master
ui
Develop
spa
master 分支(origin/master)code
代碼倉庫中有且僅有的一條主分支,默認爲 master ,在建立版本庫時會自動建立。全部提供給用戶使用的正式版本的源碼,都會在這個分支上發佈。也就是說主分支 master 用來發布重大版本。orm
develop 分支(origin/develop)
平常開發工做都會在 develop 分支上面完成。develop 分支能夠用來生成代碼的最新隔夜版本(nightly builds)。
建立 develop
分支
$ git checkout -b develop master
#push develop 到遠程倉庫
$ git push origin develop
當咱們在develop
上完成了新版本的功能,最終會把全部的修改 merge
到 master
分支。針對每次 master
的修改都會打一個 Tag 做爲可發佈產品的版本號。
開發過程當中不可能項目人全部都在一個 develop
分支中開發,版本管理會很混亂。因此除了主要分支外,咱們還須要一些輔助分支來協助團隊成員間的並行開發。
所用到的輔助分支大致分三類:
經過分支名咱們能知道各種型分支都有特定做用,對於他們各自的起始分支和最終的合併分支也都有嚴格規定。呼,雖然可能會麻煩點,但讓人一目瞭然的效果仍是很誘人的。
下面逐一介紹下各種型分支的建立使用和移除方法,過程當中我在 Github
中建立一個虛擬的項目用來熟悉整個流程,或許你也能夠像我同樣作一遍。哈,動手總會有意外收穫嘛。廢話少說,繼續正題~
應用場景:
當要開始一個新功能的開發時,我門能夠建立一個 Feature branche
。等待這個新功能開發完成並肯定應用到新版本中就合併回 develop
,那麼若是不是就會被很遺憾的丟棄。。。
應用規則:
從 develop
分支建立,最終合併回 develop
分支;
分支名:feature/*;
Tips:這裏不少地方說用 feature-* 的方式命名,由於公司項目中用的 feature/*方式,也就習慣了,其實意思是同樣的。
$ git checkout -b feature/test develop
do something in feature/test
branch
push 本地 feature/test
到遠處代碼庫;
$ git push origin feature/test
$ git checkout develop $ git merge --no-ff feature/test
"- -no-ff" 的做用是建立一個新的 "commit" 對象用於當前合併操做。這樣既能夠避免丟失該功能分支的歷史存在信息,又能夠集中該功能分支全部歷史提交。而且若是想回退版本也會比較方便。
$ git branch -d feature/test
$ git push origin --delete feature/test
應用場景:
"Release branches" 用來作新版本發佈前的準備工做,在上面能夠作一些小的 bug 修復、準備發佈版本號等等和發佈有關的小改動,其實已是一個比較成熟的版本了。另外這樣咱們既能夠在預發佈分支上作一些發佈前準備,也不會影響 "develop" 分支上下一版本的新功能開發。
應用規則:
從 develop
分支建立,最終合併回 develop
和 master
;
分支名:release-*;
$ git checkout -b release-1.1 develop
#push 到遠程倉庫(可選)
$ git push origin release-1.1
do something in release-1.1
branch
$ git checkout master
$ git merge --no-ff release-1.1
$ git tag -a 1.1
$ git push origin 1.1
當咱們的 release-1.1
的 Review 完成,也就預示着咱們能夠發佈了。打上相應的版本號,再 push 到遠程倉庫。
預發佈分支所作的修改同時也要合併回 develop
$ git checkout develop
$ git merge --no-ff release-1.1
$ git branch -d release-1.1
$ git push origin --delete release-1.1
應用場景:
"Hotfix branches" 主要用於處理線上版本出現的一些須要馬上修復的 bug 狀況.
應用規則:
從 master
分支上當前版本號的 tag
處切出,也就是從最新的 master
上建立,最終合併回 develop
和 master
;
分支名:hotfix-*;
$ git checkout -b fixbug-1.1.1 master
#push 到遠程倉庫(可選)
$ git push origin fixbug-1.1.1
do something in fixbug-1.1.1
branch
$ 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
並打上版本號;
$ git checkout develop
$ git merge --no-ff fixbug-1.1.1
$ git branch -d fixbug-1.1.1
$ git push origin --delete fixbug-1.1.1