## 前言
相信你通過git入門學習已經可以進行簡單的代碼提交與更新了,但那只是開始,這一篇文章將重點帶領你如何去做分支管理。
## 查看分支
``` bash
#查看本地分支,其中本地當前分支會有*號標記
$ git branch
#查看遠程分支
$ git branch -r
#查看所有分支
$ git branch -a
```
## 切換分支
``` bash
#新建分支(如果本地已有會報錯)
$ git branch branchname
#切換分支:本地沒有該分支,遠程有,檢出遠程分支;本地有該分支,直接切換
$ git checkout branchname
#切換分支:切換到上一個分支
$ git checkout -
#切換分支:本地以及遠程都沒有該分支(提示路徑錯誤),需新建本地分支(當前分支為模板)
$ git checkout -b branchname
#切換分支:本地以及遠程都沒有該分支(提示路徑錯誤),需新建本地分支并指定分支模板
$ git checkout -b branchname copybranch
```
## 刪除分支
``` bash
#刪除本地分支,要求不再本地分支上,
$ git branch -d branchname
#如果刪除不掉(比如提示有未被歸并的修改),嘗試追加 -f(--force表示強制)
$ git branch -d branchname -f
#刪除遠程分支,提供兩種方式(1 刪除分支 2 推送空內容 等于刪除)
$ git push origin --delete dev1
$ git push origin :dev1
```
## 本地分支推送到遠程
``` bash
默認推送到對應分支
$ git push
#本地分支推送到遠程(遠程沒有該分支,遠程新建分支)
$ git push --set-upstream origin branchname
#指定推送到其他分支 ,與上面的代碼等效
$ git push origin dev1
#
```
## 合并分支
``` bash
#可以合并指定分支到當前分支(本地)
$ git merge branchname
#可以合并指定分支到當前分支(遠程)
$ git merge origin/branchname
```
## 分支策略
### 如何利用分支?
首先,master分支應該是非常穩定的,也就是僅用來發布新版本,平時不能在上面干活;
那在哪干活呢?干活都在dev分支上,也就是說,dev分支是不穩定的,到某個時候,比如1.0版本發布時,再把dev分支合并到master上,在master分支發布1.0版本;
你和你的小伙伴們每個人都在dev分支上干活,每個人都有自己的分支,時不時地往dev分支上合并就可以了。

### bug分支
* 軟件開發中,bug就像家常便飯一樣。有了bug就需要修復,在Git中,由于分支是如此的強大,所以,每個bug都可以通過一個新的臨時分支來修復,修復后,合并分支,然后將臨時分支刪除。
1. 首先確定要在哪個分支上修復bug,假定需要在master分支上修復,就從master創建臨時分支:
``` bash
#切換master分支
$ git checkout master
#創建bug分支
$ git checkout -b issue-1
```
2. 修復完成后,切換到master分支,并完成合并,最后刪除issue-1分支:
``` bash
#切換到主分支
$ git checkout master
#合并bug分支
$ git merge --no-ff -m "merged bug fix 1" issue-1
#刪除bug分支
$ git branch -d issue-1
```
### 臨時保存(git stash)
* 當你正在開發一個分支,但是這個分支還未完全開發好,不能提交到dev,需要臨時保存。那么需要提交到本地倉庫,然后stash之后就可以保存此時的工作空間。也可以通過這個命令迅速找到此時的提交狀態版本。
``` bash
$ git stash
Saved working directory and index state WIP on blog: 06e9083 sd
HEAD is now at 06e9083 sd
```
### 功能分支
* 我們經常會遇到需要開發新功能,與bug分支策略基本一致,需要建立單獨的分支完成功能開發,然后合并,并且刪除該分支
1. 首先確定要在哪個分支上開發功能,假定需要在dev1分支上修復,就從dev1創建fea-dept分支:
``` bash
#切換dev1分支
$ git checkout dev1
#創建fea分支
$ git checkout -b fea-dept
```
2. 修復完成后,切換到dev1分支,并完成合并,最后刪除fea-dept分支:
``` bash
#切換到開發分支
$ git checkout dev1
#合并fea分支
$ git merge --no-ff -m "merged bug fix 1" fea-dept
#刪除fea分支
$ git branch -d fea-dept
```
### 多人協作
* 如此多的分支種類,該如何處理,可以參考以下建議,具體情況自己靈活使用。
1. master分支是主分支,因此要時刻與遠程同步;
2. dev分支是開發分支,團隊所有成員都需要在上面工作,所以也需要與遠程同步;
3. bug分支只用于在本地修復bug,就沒必要推到遠程了,除非老板要看看你每周到底修復了幾個bug;
4. feature分支是否推到遠程,取決于你是否和你的小伙伴合作在上面開發。
- 前端入門
- 前端入職須知
- 前端自我定位
- pc與手機頁面差別
- 前端書單
- 前端種子計劃
- 前端技術棧
- ps
- ps入門階段
- html
- html入門
- html代碼規范
- meta
- table
- iframe
- a標簽詳解
- image
- html代碼審查工具
- h5專題
- h5入門
- h5新增屬性
- canvas畫布教程
- audio/video
- Geolocation
- Websockets
- Web storage
- Communication
- Web Workers
- requestAnimationFrame
- css
- css入門必學
- css代碼規范
- 項目字體規范
- css基本位置布局
- css常見樣式命名規則
- css代碼優化建議
- css常用樣式名
- css選擇器攻略
- css盒子模型的理解
- css屬性繼承與默認值
- css代碼審查工具
- css中常見的知識盲區
- css3新特性淺談
- css新特性了解
- border-radius
- background
- transform
- animation
- white-space
- css常用技術
- 文本兩端對齊
- css之浮動解決方案
- css優化建議
- 文本超出省略
- img-sprites
- rem布局教程
- 水平居中&垂直居中
- 固寬&變寬布局
- 寬高固定比例的盒模型
- 樣式預處理語言
- less教程
- sass教程
- postcss教程
- js
- javascript入門
- js代碼規范
- js基礎拓展
- js代碼審查工具
- js性能優化
- js基本語句
- 基本運算
- 基本語句語法
- js對象
- es6入門
- obj
- Array
- Date
- String
- Boolean
- Number
- Json
- RegExp
- Math
- function
- jquery入門
- jq核心思想
- jq基本語法
- jq插件庫匯總
- js常用技術
- break&continue區別
- js對日期轉換
- js控制運動-move.js
- 原生js-cookie語法
- ajax請求后回調
- 表單數據序列化
- zepto
- zepto入門
- 百度touchjs
- js編程
- 插件庫
- 功能性插件
- pdfjs
- wdatepicker
- qrcoder
- barcode插件
- photoviewer
- hammer.js
- echarts
- 交互組件
- layerjs
- java
- java入門
- java基本語句
- springMVC
- javaweb
- vm模板引擎
- freemarker
- maven教程
- mySql教程
- flex教程
- flex入門
- git教程
- git入門
- git分支
- git-tag管理
- git注意事項
- git-torise入門
- ide-git插件使用
- web
- web兼容
- web兼容思想
- pc端兼容適配文檔
- pc端兼容bug匯總
- ie兼容bug匯總
- 手機兼容bug匯總
- web安全
- jeecms
- web存儲
- app/h5組件
- 安卓教程
- ios教程
- 前端教程
- rubikx的教程
- 其他
- artTemplate
- tmod使用
- 跨域問題
- markdown教程
- 常用工具
- postman-api調試
- web常識
- 瀏覽器ua統計
- ui框架
- easyui
- bootstrap
- 入門推薦
- weui
- sui-pc
- sui-mobile
- layerUi