## 前言
相信你通过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分支上合并就可以了。
![git-sta分支管理](https://box.kancloud.cn/2016-04-25_571dc1c86b4ec.png)
### 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