Git中文社区

团队工作流

Git 非常灵活,但团队协作需要约定:分支怎么建、什么时候合并、提交说明怎么写。本章介绍几种主流的工作流和提交规范。

GitHub Flow

GitHub Flow 是最简单、最流行的工作流,适合持续部署的项目:

  1. main 分支始终保持可部署状态;
  2. 开发新功能或修复时,从 main 创建一个描述性命名的分支;
  3. 在分支上提交,并定期推送到远程;
  4. 需要反馈或准备合并时,发起 Pull Request(PR,在 GitLab/Gitee 中叫 Merge Request);
  5. 经过代码评审、自动化测试通过后,合并到 main;
  6. 合并后立即部署。
git switch main
git pull
git switch -c feature/search
# ... 开发、提交 ...
git push -u origin feature/search
# 然后在网页上发起 Pull Request

Git Flow

Git Flow 是一种更严格的模型,适合有明确版本发布周期的项目(如客户端软件)。它定义了以下分支:

分支用途生命周期
main只存放正式发布的版本,每个提交都打标签长期
develop日常开发的集成分支长期
feature/*从 develop 分出,完成后合回 develop临时
release/*从 develop 分出,用于发布前测试和修复,完成后合入 main 和 develop临时
hotfix/*从 main 分出,用于紧急修复,完成后合入 main 和 develop临时

Git Flow 结构清晰,但分支较多、流程较重。对于 Web 应用这类持续交付的项目,通常 GitHub Flow 就足够了。

主干开发(Trunk-Based Development)

所有开发者都频繁(每天至少一次)地向主干提交小的改动,功能分支存活时间极短(通常不超过一两天)。未完成的功能通过**特性开关(Feature Flag)**隐藏。这种方式要求有完善的自动化测试和持续集成,是很多大型互联网公司采用的模式。

Fork + Pull Request

参与开源项目时,你通常没有直接推送的权限,流程是:

# 1. 在 GitHub 上 Fork 项目到自己的账号下

# 2. 克隆自己的 Fork
git clone [email protected]:zhangsan/project.git
cd project

# 3. 添加原始仓库为 upstream
git remote add upstream https://github.com/original/project.git

# 4. 创建分支并开发
git switch -c fix/typo
git commit -am "修复文档拼写错误"
git push -u origin fix/typo

# 5. 在 GitHub 上向原始仓库发起 Pull Request

保持 Fork 与原始仓库同步:

git fetch upstream
git switch main
git merge upstream/main
git push origin main

提交信息规范

清晰的提交说明是团队协作的基础。目前最广泛使用的是 Conventional Commits(约定式提交) 规范:

<类型>(<范围>): <描述>

[正文]

[脚注]

常用类型:

类型含义
feat新功能
fix修复 Bug
docs文档变更
style代码格式(不影响逻辑)
refactor重构(既不是新功能也不是修复)
perf性能优化
test添加或修改测试
build构建系统或外部依赖变更
ci持续集成配置变更
chore其他杂项

示例:

feat(auth): 支持手机验证码登录

用户可以通过手机号 + 短信验证码的方式登录,
验证码有效期 5 分钟。

Closes #128

有破坏性变更时,在类型后加 ! 或在脚注写 BREAKING CHANGE::

feat(api)!: 用户接口返回结构调整

遵循这一规范后,可以借助工具自动生成 CHANGELOG、自动确定语义化版本号。

好的实践

  • 提交要小而专注:一个提交只做一件事,便于评审和回滚;
  • 经常提交、经常推送:减少冲突,也避免本地数据丢失;
  • 提交前自查:用 git diff --staged 检查即将提交的内容;
  • 不要提交生成的文件和密钥:善用 .gitignore;
  • 保护主分支:在托管平台上开启分支保护,要求 PR 评审和 CI 通过才能合并;
  • 公共分支不要强制推送。