分支管理
分支命名
master分支
- master分支为主分支,部署生成环境的分支【必须确保master分支的稳定性】
- master分支一般由develop及hotfix分支(修复分支)合并【任何时候都不能直接修改代码】
develop分支
- develop为开发分支,始终保持最新完成及bug修复后的代码
- 一般用于开发新功能,feature分支都是develop的子分支
feature分支
- 开发新功能时,以develop为基础创建feature分支
- 分支命名:feature/开头的为特性分支,命名规则:feature/login_module、feature/cart_module
release分支
- release为预上线分支,发布提测阶段,会以release分支代码为基准提测
开发过程:
当有一组feature开发完成,首先会合并到develop分支,进入提测时,会创建release分支。
若测试时遇到bug需要修复,则直接由开发者在release分支修复并提交。
当测试完成之后,合并release分支到master和develop分支,此时master为最新代码,用作上线。
hotfix分支
- 分支命名:hotfix/开头的为修复分支
- 线上出现紧急问题时,需要及时修复,以master分支为基线,创建hotfix分支,修复完成后,需要合并到master分支和develop分支
git开发相关流程
增加登录功能
# 新建登录功能分支
(dev)$: git checkout -b feature/login_module
# 开发loading...
(feature/login_module)$: ...省略开发过程,假设秒完成
# 添加新建文件及修改文件到暂存区
(feature/login_module)$: git add -A
# 提交功能代码
(feature/login_module)$: git commit -m "feat(view): 登录功能完成"
# push代码同步远程仓库
(feature/login_module)$: git push
# 功能分支合并到dev(使用非快速合并保留commit记录)
(dev)$: git merge feature/login_module --no-ff
修复紧急bug
# 从master建立hotfix分支
(master)$: git checkout -b hotfix/login_module
# bug修复过程
(hotfix/login_module)$: ...省略开发过程,假设秒完成
# 将修改文件添加到本地暂存区
(hotfix/login_module)$: git add -A
# 提交bug修复代码
(hotfix/login_module)$: git commit -m "fix(data): 修复登录数据异常bug"
# 把hotfix分支合并到master, 并上线到生产环境
(master)$: git merge hotfix/login_module --no-ff
# 把hotfix分支合并到dev,同步代码
(dev)$: git merge hotfix/login_module --no-ff
测试环境代码
# 把dev分支合并到release分支,并在测试环境拉取测试
(release)$: git merge dev --no-ff
生产环境
# 把release测试完成的代码合并到master, 运维人员操作
(master)$: git merge release --no-ff
# 给版本命名,打tag
(master)$: git tag -a v0.1 -m '部署包版本名称'
(master)$: git push origin v1.0
git commit 规范
commit信息目的
- 方便代码review
- 规范良好的版本发布日志
- 便于后期代码交接和新开发人员快速上手代码
commit message规范
<type>: <subject>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>
- type (本次提交commit的类型)
- feat: 添加新特性
- fix: 修复bug
- docs: 修改文案类
- style: 修改ui样式,如空格、缩减,不改代码逻辑
- refactor: 代码重构,无新功能或修复bug
- perf: 增加代码进行性能测试
- test: 增加测试用例
- chore: 改变构建流程、或者增加依赖库、工具等
- scope (本次commit设计范围)
- view(视图层)
- data(数据层)
- control(控制层)
- *(影响多个层级)
- subject (commit记录简短描述,以动词开头,首字母小写,结尾不加.)
- body (对本次commit的详细描述)
- footer (描述与之相关的issue 或 break change)
commit message范例
docs(view): change obsolete information
chore: fix eslint error
fix(grunt-utils): correctly detect es6
git 命令
配置命令
# 列出当前配置
git config --list
# 列出Repository
git config --local --list
# 列出全局配置
git config --global --list
# 列出系统配置
git config --global --list
# 配置用户信息
git config --global user.name "your name"
git config --global user.email "youremail@qq.com"
分支管理
# 查看本地分支
git branch
# 查看远程分支
git branch -r
# 查看本地和远程分支
git branch -a
# 从当前分支,切换到其它分支
git checkout <branch-name>
# 创建并切换到新分支
git checkout -b <branch-name>
# 删除分支
git branch -d <branch-name>
# 当前分支与指定分支合并
git merge <branch-name>
# 查看哪些分支已经合并到当前分支
git branch --merged
# 查看哪些哪些分支没有合并到当前分支
git branch --no-merged
# 查看各个分支最后一个提交对象的信息
git branch -v
# 删除远程分支
git push origin --d <branch-name>
# 重命名分支
git branch -m <oldbranch-name> <newbranch-name>
# 拉去远程分支并创建本地分支
git checkout -b 本地分支名x origin/远程分支名x
fetch指令
# 将某个远程主机的更新,全部取回本地
git fetch <远程主机名>
# 取回特定分支
git fetch <远程主机名> <分支名>
# 取回特定分支,并拉去到本地分支
git fetch origin <branch-name>:<local-name>
文件暂存
# 添加改动到stash
git stash save -a "message"
# 删除暂存
git stash drop <stash@{ID}>
# 查看stash列表
git stash list
# 删除全部缓存
git stash clear
# 恢复改动
git stash pop <stash@{ID}>
撤销操作
# 撤销工作区修改
git checkout -- <file>
# 暂存区文件撤销
git reset HEAD <file>
# 版本回退
# --hard
git reset --(soft|mixed|hard) < HEAD~(num)> | <commit ID>
# git获取commit id
git rev-parse --short HEAD
# git获取完整commit id
git rev-parse HEAD
git文件状态
git status
# untracked 暂存区没有该文件
# modified 有文件已修改
# staged 使用git add 暂存
git差异比较
# 比较工作区与缓冲区
git diff
# 比较缓冲区与本地库最近一次commit内容
git diff --cached
# 比较工作区与本地最近一次commit内容
git diff HEAD
# 比较两个commit之间差异
git diff <commit ID> <commit ID>
文档查询
# 展示git命令大纲
git help(--help)
# 展示git命令全部列表
git help -a
# 展示具体命令说明手册
git help <command>