Git 学习

384 阅读4分钟

分支管理

分支命名

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范例

  1. docs(view): change obsolete information
  2. chore: fix eslint error
  3. 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>

参考链接