Git工作流策略 git-workflow-strategy

掌握 Git 工作流,包括 GitFlow、GitHub Flow、基于主干的开发等,配置分支、合并策略和团队协作模式。

DevOps 0 次安装 0 次浏览 更新于 3/4/2026

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

资源