// 未分类
Git相关
发布 2021-07-09 · 永久链接
no excerpt about this article
# GIT
---
## 分区
* 工作区
电脑里能看到的目录
* 暂存区
`git add`后工作区修改过的文件会添加到暂存区
* 版本区
`git commit`后,暂存区的文件会打包好作为一次提交放到版本区中
---
## git分区图例

---
## 基本操作
##### 文件操作类
- git add `xxxxxx.java` `/folder`
- git commit `-m` `-v`
- git stash `pop`
- git reset `head` `--hard`
---
### git stash/pop
用于临时保存和回复修改,**可跨分支**
> 注:在未add之前才能执行stash!(即未加入暂存区)
---
### commit message 规范
- feat(module):新功能(feature)。
- fix:修复bug,可以是QA发现的BUG,也可以是研发自己发现的BUG。
- docs:文档(documentation)。
- style:格式(不影响代码运行的变动)。
- refactor:重构(即不是新增功能,也不是修改bug的代码变动)。
- perf:优化相关,比如提升性能、体验。
- test:增加测试。
- chore:构建过程或辅助工具的变动。
- revert:回滚到上一个版本。
- merge:代码合并(冲突修复等)。
---
### commit message 规范

---
## 基本操作
##### 分支操作类
- git checkout `-b` `branch`
- git merge `branch`
- git rebase `branch`
- git pull `remote` `branch`
- git push `remote` `branch`
---


---
### merge 冲突
``` html
<<<<<<< HEAD:index.html
=======
>>>>>>> iss53:index.html
```
#### `git merge --abort`
---
### merge的特点
##### **优点**
- 使用简单
- 保留每一步的记录
- 保留源分支的原始记录
##### **缺点**
- 保留每一步的记录
---
### rebase
同merge一样,主要功能也是合并分支,但是有很多不一样的细节
> 将提交到某一分支上的所有修改都移至另一分支上,就好像“重新播放”一样。
---
### rebase

在分支`experiment`上执行`git rebase master`, 将 `C4` 中的修改变基到 `C3` 上
---
### rebase 和 merge 的区别
**1、使用难度**
merge较rebase更易于理解
**2、对git操作历史的记录结果不一样**
merge会记录所有的合并操作,而rebase只会保留一个串行的提交记录。
---
### merge后的历史

---
### 过多的merge记录

---
### rebase后的历史

---
## 分支协作
### Git Work Flow
---
### Git Work Flow
#### 分类
- Git Flow
- GitHub Flow
- GitLab Flow
---
### Git Flow
以Git分支能力为基础的协作模型
##### 分支类型
- Master *最新的可发布版本*
- Dev *最新的开发进度*
- Realease *预发布分支*
- HotFix *紧急 bug 修复的分支*
- Feature *模块开发分支*
---
#### 一般流程
1. 从master新建分支dev。
2. 从dev新建各个feature分支,并在feature上开发。
3. 开发完成的feature将会合并到dev。
4. 一个阶段的功能开发完成后将会新建出一个release分支用于测试等**预发布**。
5. 在预发布期间发现的问题将在release中修改并把修改合并到dev。6、release测试通过后,合并到master。并在master`tag`一个版本记录。
6. 期间线上发生bug,需要从master中新建一个hotfix分支解决紧急问题,并合并到master、dev中。[特殊]
---

---
### Github Flow
基于GitFlowa新增`fork`, `Pull Request`

---
