Git 工作流策略
概述
建立高效的 Git 工作流,以支持团队协作、代码质量和部署准备,通过结构化的分支策略和合并模式。
何时使用
- 团队协作设置
- 版本管理
- 功能开发协调
- 热修复程序
- 代码审查流程
- CI/CD 集成规划
实施示例
1. GitFlow 工作流设置
# 初始化 GitFlow
git flow init -d
# 开始一个功能
git flow feature start new-feature
# 功能开发
git add .
git commit -m "feat: 实现新功能"
git flow feature finish new-feature
# 开始一个发布
git flow release start 1.0.0
# 更新版本号,变更日志
git add .
git commit -m "chore: 版本提升至 1.0.0"
git flow release finish 1.0.0
# 创建热修复
git flow hotfix start 1.0.1
# 修复关键错误
git add .
git commit -m "fix: 生产中的关键错误修复"
git flow hotfix finish 1.0.1
2. GitHub 流工作流
# 克隆并设置
git clone https://github.com/org/repo.git
cd repo
# 从 main 创建功能分支
git checkout -b feature/add-auth-service
git add .
git commit -m "feat: 添加认证服务"
git push origin feature/add-auth-service
# 推送更改,创建 PR,请求审查
# 审查通过且 CI 通过后,合并到 main
git checkout main
git pull origin main
git merge feature/add-auth-service
git push origin main
# 部署和清理
git branch -d feature/add-auth-service
git push origin -d feature/add-auth-service
3. 基于主干的开发
# 创建短期功能分支
git checkout -b feature/toggle-feature
# 保持提交小而原子
git add specific_file.js
git commit -m "feat: 添加特性标志配置"
# 经常在 main 上进行变基
git fetch origin
git rebase origin/main
# 创建 PR 并带有小的变更集
git push origin feature/toggle-feature
# PR 合并后,删除分支
git checkout main
git pull origin main
git branch -d feature/toggle-feature
4. Git 配置工作流
# 配置用户
git config --global user.name "开发者姓名"
git config --global user.email "dev@example.com"
# 设置默认分支
git config --global init.defaultBranch main
# 配置合并策略
git config --global pull.ff only
git config --global merge.ff false
# 启用 rerere(重用记录的解决方案)
git config --global rerere.enabled true
# 配置提交信息格式
git config --global commit.template ~/.gitmessage
# 设置分支保护规则
git config --global branch.main.rebase true
git config --global branch.develop.rebase true
5. 分支命名约定
# 功能分支
git checkout -b feature/user-authentication
git checkout -b feature/JIRA-123-payment-integration
# 错误修复分支
git checkout -b bugfix/JIRA-456-login-timeout
git checkout -b fix/null-pointer-exception
# 发布分支
git checkout -b release/v2.1.0
git checkout -b release/2024-Q1
# 热修复分支
git checkout -b hotfix/critical-security-patch
git checkout -b hotfix/v2.0.1
# 杂项分支
git checkout -b chore/update-dependencies
git checkout -b chore/refactor-auth-module
6. 合并策略脚本
#!/bin/bash
# merge-with-strategy.sh
BRANCH=$1
STRATEGY=${2:"squash"}
if [ -z "$BRANCH" ]; then
echo "使用方法: ./merge-with-strategy.sh <分支> [squash|rebase|merge]"
exit 1
fi
# 更新 main
git checkout main
git pull origin main
case "$STRATEGY" in
squash)
git merge --squash origin/$BRANCH
git commit -m "合并 $BRANCH"
;;
rebase)
git rebase origin/$BRANCH
;;
merge)
git merge --no-ff origin/$BRANCH
;;
*)
echo "未知策略: $STRATEGY"
exit 1
;;
esac
git push origin main
git push origin -d $BRANCH
7. 协作工作流与代码审查
# 开发者创建功能
git checkout -b feature/search-optimization
# 进行更改
git add .
git commit -m "perf: 优化搜索算法"
git push origin feature/search-optimization
# 创建带有详细描述的拉取请求
# 审查者审查并提出更改建议
# 开发者根据要求进行更改
git add .
git commit -m "refactor: 根据审查提高搜索效率"
git push origin feature/search-optimization
# 审查通过后
git checkout main
git pull origin main
git merge feature/search-optimization
git push origin main
# 清理
git branch -d feature/search-optimization
git push origin -d feature/search-optimization
最佳实践
✅ 做
- 选择与团队规模和发布周期相匹配的工作流
- 保持功能分支短期存在(< 3 天)
- 使用带有类型前缀的描述性分支名称
- 合并到 main 前需要代码审查
- 在 main/release 分支上强制执行保护规则
- 经常变基以最小化冲突
- 编写原子的、逻辑清晰的提交
- 保持提交信息清晰一致
❌ 不做
- 不要直接提交到 main 分支
- 不要创建长期存在的特性分支
- 不要使用模糊的分支名称(dev, test, temp)
- 不要在没有代码审查的情况下合并
- 不要在同一个分支中混合多个功能
- 不要强制推送到共享分支
- 忽略失败的 CI 检查
- 在 TBD 中合并时不要使用合并提交
分支保护规则(GitHub)
# .github/branch-protection-rules.yml
branches:
main:
required_status_checks: true
required_code_review: true
dismiss_stale_reviews: true
require_branches_up_to_date: true
enforce_admins: true
required_signatures: false