Git 工作流程

Git 工作流程指南

掌握各种Git工作流程,提升团队协作效率和代码质量

工作流程概述

Git工作流程是团队在使用Git进行版本控制时遵循的一系列约定和规则。选择合适的工作流程可以提高团队协作效率,减少冲突,并确保代码质量。

集中式工作流

类似于SVN的简单工作流,所有开发者直接向中央仓库推送更改。

  • 简单易学
  • 适合小型团队
  • 没有复杂的分支策略

功能分支工作流

每个新功能都在独立分支上开发,完成后合并到主分支。

  • 功能隔离
  • 便于代码审查
  • 减少主分支污染

Gitflow工作流

严格定义的分支模型,包含功能、发布、热修复等分支类型。

  • 适合版本发布
  • 严格的发布管理
  • 支持并行开发

Forking工作流

每个开发者fork主仓库,在个人副本上工作,通过Pull Request贡献代码。

  • 开源项目标准
  • 安全的贡献模式
  • 维护者完全控制

集中式工作流

集中式工作流是Git最简单的协作方式,特别适合从SVN等集中式版本控制系统迁移过来的团队。

工作流程示意图

中央仓库

所有开发者直接克隆中央仓库,进行更改后直接推送到中央仓库。

工作步骤

1

克隆中央仓库

每个开发者克隆中央仓库到本地:

git clone https://github.com/user/repo.git
2

进行更改并提交

在本地进行更改并提交到本地仓库:

# 进行更改
git add .
git commit -m "描述更改"
3

获取最新更改

在推送前,先获取中央仓库的最新更改:

git pull origin main

如果有冲突,需要先解决冲突。

4

推送更改

将本地更改推送到中央仓库:

git push origin main

注意: 在团队协作中,频繁地进行git pull可以减少冲突的发生。

功能分支工作流

功能分支工作流的核心思想是每个功能都应该在独立的分支上开发,完成后通过合并请求(Pull Request)集成到主分支。

工作流程示意图

main
feature/login
feature/payment

每个功能在独立分支上开发,完成后合并到主分支。

工作步骤

1

从主分支创建功能分支

基于主分支创建新的功能分支:

git checkout main
git pull origin main
git checkout -b feature/新功能名称
2

在功能分支上开发

在功能分支上进行开发并定期提交:

# 进行更改
git add .
git commit -m "实现登录功能"

# 定期推送到远程
git push -u origin feature/新功能名称
3

创建合并请求

功能完成后,在GitHub/GitLab等平台上创建合并请求(Pull Request)。

团队成员在合并请求中进行代码审查和讨论。

4

合并到主分支

通过代码审查后,将功能分支合并到主分支:

git checkout main
git merge feature/新功能名称
git push origin main
5

删除功能分支

合并完成后,删除本地和远程的功能分支:

git branch -d feature/新功能名称
git push origin --delete feature/新功能名称

Gitflow工作流

Gitflow工作流由Vincent Driessen提出,定义了严格的分支模型,适合有发布周期的大型项目。

工作流程示意图

main
develop
feature/A
release/1.0
hotfix

Gitflow包含五种分支类型:主分支(main)、开发分支(develop)、功能分支(feature)、发布分支(release)和热修复分支(hotfix)。

分支说明

1

主分支 (main)

存放稳定、可发布的代码版本,每个提交都应该对应一个版本标签。

2

开发分支 (develop)

集成功能分支的代码,是功能开发的主要分支。

3

功能分支 (feature/*)

从develop分支创建,用于开发新功能,完成后合并回develop分支。

4

发布分支 (release/*)

从develop分支创建,用于准备发布,只进行bug修复和文档更新,完成后合并到main和develop分支。

5

热修复分支 (hotfix/*)

从main分支创建,用于紧急修复生产环境中的bug,完成后合并到main和develop分支。

提示: 可以使用git flow扩展工具来简化Gitflow工作流的操作。

Forking工作流

Forking工作流是开源项目最常用的协作模式,每个贡献者拥有项目的独立副本,通过Pull Request向主项目贡献代码。

工作流程示意图

官方仓库
开发者A的Fork
开发者B的Fork

每个开发者fork官方仓库,在个人副本上工作,通过Pull Request向官方仓库贡献代码。

工作步骤

1

Fork官方仓库

在GitHub/GitLab上fork官方仓库,创建个人副本。

2

克隆个人副本

克隆fork后的仓库到本地:

git clone https://github.com/你的用户名/项目名.git
3

添加上游仓库

添加官方仓库作为上游远程仓库:

git remote add upstream https://github.com/官方用户/项目名.git
4

创建功能分支

创建功能分支进行开发:

git checkout -b feature/新功能
# 进行开发并提交
5

推送到个人仓库

将功能分支推送到你的fork仓库:

git push origin feature/新功能
6

创建Pull Request

在GitHub/GitLab上创建Pull Request,请求将你的更改合并到官方仓库。

7

同步官方仓库更改

定期从官方仓库获取最新更改,保持你的fork同步:

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

工作流程比较

工作流程 复杂度 团队规模 发布频率 主要优势
集中式工作流 小型团队(1-5人) 不频繁 简单易学,迁移成本低
功能分支工作流 中小型团队(3-10人) 中等 功能隔离,便于代码审查
Gitflow工作流 中大型团队(5-20人) 有计划的发布 严格的发布管理,支持并行开发
Forking工作流 中高 大型分布式团队 不固定 安全的贡献模式,维护者完全控制

Git最佳实践

提交消息规范

编写清晰、一致的提交消息,使用约定式提交(Conventional Commits)格式:

feat: 添加新功能
fix: 修复bug
docs: 更新文档
style: 代码格式调整
refactor: 代码重构

保持提交简洁

每个提交应该只包含一个逻辑更改,避免将多个不相关的更改放在同一个提交中。

使用git add -p进行交互式暂存,选择要提交的更改。

频繁同步

定期从上游仓库获取最新更改,减少合并冲突:

git fetch origin
git rebase origin/main

使用rebase而不是merge可以保持历史记录整洁。

分支命名规范

使用一致的分支命名约定:

  • 功能分支: feature/简短描述
  • 修复分支: fix/问题描述
  • 发布分支: release/版本号
  • 热修复分支: hotfix/问题描述

保持历史清晰

在合并前整理提交历史:

# 交互式rebase整理提交
git rebase -i HEAD~5

# 压缩多个提交为一个
git reset --soft HEAD~3
git commit -m "新的提交消息"

保护主分支

设置分支保护规则,要求:

  • Pull Request必须通过代码审查
  • 必须通过所有CI检查
  • 禁止直接推送到主分支