高效规范的 Git 使用指南

31 阅读3分钟

背景

随着团队的扩大,多人协作必不可少,其中代码管理更是重中之重,高效且规范的代码管理方案是必不可少的,否则面临的就是无尽的 conflict 和无从下手的 commit log

目标

  • 建立完整的 Git 工作流,包括分支使用、commit log规范、tag规范等
  • 为了规范 Git commit 日志标准,便于后续代码 review,版本发布以及追溯和理解提交历史等一系列事情。

代码分支管理以及使用

本文介绍的是Gitflow Workflow,仅仅作为指导,不做强求,有不同的意见,你说的都对!

分支介绍
分支名称分支说明
Master生产分支,只能从其他分支合并,不能直接修改
Develop主开发分支,包含所有要发布到下一个 Release 的代码,该分支主要合并其他分支内容
Release发布分支,基于 Develop 分支创建,待发布完成后合并到 Develop 和 Master 分支去
Feature新功能分支,基于 Develop 分支创建,开发新功能,待开发完毕合并至 Develop 分支
Hotfix修复分支,基于 Master 分支创建,待修复完成后合并到 Develop 和 Master 分支去,同时在 Master 上打一个tag
开发实践

日常开发需求建立 feature 分支

# 通过develop新建feaeure分支
git checkout -b feature/分支名 develop

# 可选,将分支推送到远端仓库
git push -u origin feature/分支名

# 查看状态
git status

# 添加提交内容
git add .

# 提交    
git commit 

# 拉取远端仓库 develop 分支合并到本地 develop 分支
git pull origin develop

# 切换到 develop 分支     
git checkout develop

# 将 Feature 分支合并到 develop 分支    
   # --no-ff:不使用 fast-forward 方式合并,保留分支的 commit 历史
   # --squash:使用 squash 方式合并,把多次分支 commit 历史压缩为一次    
git merge --no-ff feature/分支名

# 将分支推送远端仓库 
git push origin develop

# 删除 Feature分支
git branch -d feature/分支名

日常开发建立 release 分支

# 创建 Relase 分支并切换到 Release 分支上
git checkout -b release/0.1.0 develop

# 切换到 master 分支上
git checkout master

# 合并 release-0.1.0 分支    
git merge --no-ff release/0.1.0

# 推送到远端仓库
git push

# 切换到 develop 分支上    
git checkout develop

# 合并 release-0.1.0 分支   
git merge --no-ff release/0.1.0

# 推送到远端仓库   
git push

# 删除 release-0.1.0 分支 
git branch -d release/0.1.0

日常开发建立 hotfix 分支

# 创建 hotfix 分支并切换到 hotfix 分支上
git checkout -b hotfix/0.1.1 master

# 切换到 master 分支
git checkout master

# 合并 hotfix-0.1.1 分支
git merge --no-ff hotfix/0.1.1

# 推送到远端仓库
git push

# 切换到 develop 分支
git checkout develop

# 合并 hotfix-0.1.1 分支
git merge --no-ff hotfix/0.1.1

# 推送到远端仓库
git push

# 删除 release-0.1.0 分支    
git branch -d hotfix/0.1.1

# 为主分支打上版本标签
git tag -a v0.1.1 master

# 将标签推送到远端仓库  
git push --tags
Git commit

推荐采用

<type>: <subject>

type 取值可以如下挑选

Type(中文)Type类型(英文)描述
功能feat新增 feature
修复fix修复 bug
文档docs仅仅修改了文档,比如 README, CHANGELOG, CONTRIBUTE等等
格式style仅仅修改了空格、格式缩进、逗号等等,不改变代码逻辑
重构refactor代码重构,没有加新功能或者修复 bug
优化perf优化相关,比如提升性能、体验
测试test测试用例,包括单元测试、集成测试等
回滚chore改变构建流程、或者增加依赖库、工具等
更新revert回滚到上一个版本

subject是 commit 目的的简短描述,不超过50个字符。比如是修复一个 bug 或是增加一个 feature

本文参考来自Git之GitFlow工作流Git Commit:规范流畅,代码协作更高效!等优秀文章