## 分支存储位置
| | 分支名 | 存储位置 |
| :------------------------: | :-----------: | :--------: |
| **本地分支** | master | 本地 |
| 远程分支的**追踪分支** | origin/master | 本地 |
| git 服务器上的**远程分支** | | git 服务器 |
## 分支命名
| 可选分支名 | 可选简写分支名 | 备注 |
| :-----------: | :------------: | :--------------------------------: |
| master | | 主分支 |
| release | | 预发布 |
| develop | dev | 开发 |
| feature | feat | 新功能 |
| performance | perf | 性能 |
| hotfix | | 紧急修复问题 |
| bugfix | | 修复问题 |
| style | | 格式(不影响代码运行的变动) |
| documentation | docs | 修改文档 |
| refactor | | 重构(即非新增功能,也非修改 bug) |
| test | | 增加修改测试用例 |
| chore | | 构建过程或辅助工具的变动 |
| backup | | 恢复 |
## 创建分支
```bash
git branch <新建分支名> <默认HEAD||已建分支名||hash值>
# 在HEAD处创建新分支
git branch <新建分支名>
# 在已建分支处创建新分支
git branch <新建分支名> <已建分支名>
# 在指定hash处创建新分支
git branch <新建分支名> <hash值>
```
* 当初始化仓库后,仓库默认创建 master 分支,且 HEAD 指向 master 分支,此时还不能用此方法创建新分支
## 查看分支
```bash
# 查看本地分支
git branch
git branch -v
git branch -vv
# 查看追踪分支
git branch -r
git branch -vr
git branch -vvr
# 查看本地分支及追踪分支
git branch -a
git branch -va
git branch -vva
```
## 切换分支
```bash
git checkout <-||已建分支名||hash值>
# 切换到最近一次离开的分支
git checkout -
# 切换到已建分支
git checkout <已建分支名>
# 切换到hash值
git checkout <hash值>
```
## 创建并切换分支
```bash
git checkout -b <新建分支名> <-||已建分支名||hash值>
# 在最近一次离开的分支处创建新分支,并切换到新分支
git checkout -b <新建分支名> -
# 在已建分支处创建新分支,并切换到新分支
git checkout -b <新建分支名> <已建分支名>
# 在hash值处创建新分支,并切换到新分支
git checkout -b <新建分支名> <hash值>
```
* 当初始化仓库后,仓库默认创建 master 分支,且 HEAD 指向 master 分支,此时可以用此方法创建新分支并切换到新分支,此时默认的 master 分支会被删除
## 合并分支
```bash
# 合并分支到当前HAED所指分支,即当前所在分支
git merge <已建分支名>
# 不使用fast forward合并分支
git merge --no-ff <已建分支名>
```
## 删除分支
```bash
# 删除本地分支,没有被merge的分支不会被删除
git branch -d <分支名>
# 强制删除分支,即使该分支没有被merge也会被删除
git branch -D <分支名>
# 删除git服务器上的分支,并删除本地远程仓库的跟踪分支
git push origin -d <分支名>
# 查看git服务器上的远程分支
git remote show origin
# 查看git服务器上已经删除的,但本地依然在跟踪的远程分支
git remote prune origin --dry-run
# 简写
git remote prune origin -n
# 删除git服务器上已经删除的,但本地依然在跟踪的远程分支
git remote prune origin
# 或
git fetch --prune origin
# 简写
git fetch -p origin
git fetch -p
```