#### Git工作流程
Git 能從眾多版本控制系統中脫穎而出,其'必殺技特性'是其分支模型,Git分支模型使版本的分支合并起來非常的方便。但是濫用其分支特性也會產生副作用,很可能會出現一個紛亂叢生、結構復雜的分支系統。于是[Vincent Driessen](https://nvie.com/posts/a-successful-git-branching-model/) 提出了一個分支管理模型Git-Flow。它可以使版本庫的更新迭代結構清晰,各分支各司其職~
#### Git-Flow
> 開局一張圖,內容全靠編

* Master -- 線上分支(發布分支,長期存在)
* Develop -- 開發分支(本地分支,長期存在)
* Feature -- 新功能分支
* Release -- 預熱分支(預發布分支)
* Hotfix -- 修復分支(Bug分支)
*****

需求是開發的起點,當我們進行功能開發時,先有需求再有功能分支(feature branch)。功能分支是從Develop分支上面分出來的,完成新功能后,該分支上的功能就被合并到Develop分支上,然后刪除 `Feature`分支。
*****

當develop分支積累足夠的功能(預定的發布日期臨近),就可以建立一個預發布分支(release branch)。預發布分支是從Develop分支上面分出來的,預發布結束以后,再合并到 `Develop` 和 `Master` 分支,然后刪除 `Release` 分支。
*****

當功能正常運行后,如果遇到緊急問題需要修復,這個時候需要創建一個獨立的修復分支(hotfix branch)。修復分支是從Master分支上面分出來的,當問題修復之后,再合并到 `Develop` 和 `Master` 分支,然后刪除 `Hotfix` 分支。
*****
優點:
* 結構清晰
* 適合大型團隊
缺點:
* 相對復雜
* 頻繁切換分支
* 維護兩個長期分支 `Master` 和 `Develop`
* 不太適合"持續發布"的項目
#### Github-Flow
[Github flow](https://guides.github.com/introduction/flow/index.html)是Git flow的簡化版,專門配合"持續發布"。它是 Github使用的工作流程。
> 它只有一個長期分支,就是**Master**分支。官方[流程](https://guides.github.com/introduction/flow/index.html)如下:

1. 根據需求,從`Master`分支拉出新的分支,不區分功能分支與補丁分支。
2. 在分支中的增刪改查都要進行提交,會保留一個清晰的歷史記錄。
3. 你可以在開發過程中任意時刻發起一個`Pull Request`,讓別人看到你的請求(困難、想法、建議、工作)。
4. 大家一起評審、討論、評論你的代碼,對話過程中,你還可以不斷提交代碼。
5. 部署階段,合并之前你可以在生產分支中進行最終測試,根據測試結果選擇合并還是回滾。
6. 驗證通過,合并代碼到`Master`分支,合并請求后,如果有對應的問題,對應的問題也將被關閉。
優點:
* 簡單
* 適合"持續發布"的項目
缺點:
* `線上版本 < Master`分支(無法控制發布時間,IOS應用商店功能審核)
* 需要多維護一個 `Production` 分支來追蹤線上版本
#### Gitlab-Flow
[Gitlab flow](http://doc.gitlab.com/ee/workflow/gitlab_flow.html)是 Git flow 與 Github flow 的綜合。它吸取了兩者的優點,既有適應不同開發環境的彈性,又有單一主分支的簡單和便利。
##### 持續發布

在 `Master` 分支之外建立線上 `Production` 分支,有新需求的情況下,以 `Master` 分支為基礎遷出一個分支進行開發,功能完成之后 `merge` 到 `Master` 分支,確認沒問題后 `merge` 到 `Production` 分支。 `Master` 分支被稱為上游分支,代碼的變化必須由"上游"向"下游"發展。
##### 版本發布

對于"版本發布"的項目,才會使用發布分支,以`master`為起點拉出一個分支,每個分支都要包含次要版本,比如`2-3-stable`、`2-4-stable`等。
以后,只有修補bug,才允許將代碼合并到這些分支,并且此時要更新次要版本號。
##### 參考鏈接
[Git實操網站 - 生動形象](https://learngitbranching.js.org)
[ngulc - 博客園](https://www.cnblogs.com/lcngu/p/5770288.html)
[阮一峰 - Git分支管理策略](http://www.ruanyifeng.com/blog/2012/07/git.html)
[阮一峰 - Git工作流程](http://www.ruanyifeng.com/blog/2015/12/git-workflow.html)
[Github-Flow](https://guides.github.com/introduction/flow/index.html)
[Gitlab-Flow](https://docs.gitlab.com/ee/topics/gitlab_flow.html)
- 版本控制之Git簡介
- Git工作流程
- Git工作區、暫存區、版本庫
- Git 指令匯總
- Git 忽略文件規則 .gitignore
- pull request
- HTTP簡介
- HTTP - Keep-Alive
- HTTP緩存
- XMLHttpRequest
- Fetch
- 跨域
- HTTP 消息頭
- TCP/IP
- TCP首部
- IP首部
- IP 協議
- TCP/IP漫畫
- 前端開發規范
- 前端開發規范整理
- 前端未來規劃
- HTML思維導圖
- CSS思維導圖
- 布局
- position,float,display的關系和優先級
- line-height、height、font-size
- 移動端適配
- JS 對象
- JS 原型模式 - 創建對象
- JS 預編譯
- 探索JS引擎
- ES