Git 工作流程&分支规范

1,412 阅读10分钟

分支管理

主分支

  • main(或 master):主分支,始终保持稳定,只有通过 PR(Pull Request)合并经过测试的代码,才可以更新该分支。
  • develop(可选):开发分支,所有功能分支合并到此,经过测试后再合并到 main

辅助分支

  • feature/xxx:功能分支,每个新功能一个独立的分支,从 developmain 创建,完成后合并回 develop
  • fix/xxx:Bug 修复分支,针对已发布版本的问题修复,通常从 main 创建,修复后合并回 maindevelop
  • hotfix/xxx:紧急修复分支,针对生产环境的重大问题,从 main 分支创建,修复后合并回 maindevelop
  • release/xxx(可选):用于版本发布准备,通常从 develop 创建,经过 QA 测试后合并到 main

Git 提交规范

git commit 规范

Git 工作流程规范

1. Feature 分支管理规范 (feature/*) 🚀

feature/* 分支用于 新功能开发,确保功能开发独立进行,不影响主开发分支 (develop),并支持多人协作。

  1. 何时使用 feature/* 分支?

    开发新功能(例如:用户管理、支付系统、文章搜索等)。

    需要多人协作,每个人负责不同部分。

    功能未完成,不影响 develop,可以独立测试。

    功能可能跨多个版本,可以随时暂停/继续开发。

  2. Feature 分支的完整流程

    # 切换到 develop(或 main)并拉取最新代码
    git checkout develop
    git pull origin develop
    git checkout -b feature/user-auth
    
    # 代码开发 & 提交
    git add .
    git commit -m "feat(auth): 添加用户注册功能"
    git push origin feature/user-auth
    
    # 提交 PR,合并到 develop
    git checkout develop
    git merge --no-ff feature/user-auth
    
    # 删除 feature/* 分支
    git branch -d feature/user-auth
    git push origin --delete feature/user-auth
    
  3. 总结 ✅ feature/* 用于 新功能开发,合并到 develop。 ✅ 必须经过 Code Review + CI 测试,确保新功能稳定。 ✅ 合并后删除 feature 分支,保持仓库整洁。 ✅ 独立开发,避免影响主分支,支持多人协作

2. Release 分支管理规范

release/* 分支主要用于 版本发布,在 develop 分支的功能开发稳定后,创建 release 分支进行 测试、修复 Bug、优化文档,确保版本质量。测试通过后,合并到 main 进行最终发布,并打 Tag 记录版本。

  1. Release 分支的作用

    1. 版本准备:在 develop 上开发完成后,创建 release 分支进行 QA 测试和 Bug 修复。
    2. 保持开发独立:允许 develop 继续进行新功能开发,而 release 仅专注于稳定当前版本。
    3. 避免代码冻结:开发团队可以并行开发,而不影响版本发布流程。
    4. 版本打 Tag:确保 main 上的每个正式版本都有明确的 Tag 记录,方便回溯。
  2. Release 分支的完整流程

    # 确保 develop 代码最新
    git checkout develop
    git pull origin develop
    
    # 创建 release 分支
    git checkout -b release/v1.0.0  # release/v1.0.0 表示这是 v1.0.0 版本的发布分支。
    
    # 进入测试阶段
    # 在 release 分支进行测试,如果发现问题:
    # 修复 Bug
    git add .
    git commit -m "fix: resolve issue with login form"
    git push origin release/v1.0.0
    
    # 合并到 main
    git checkout main
    git merge --no-ff release/v1.0.0
    
    # 打 Tag
    git tag -a v1.0.0 -m "Release version 1.0.0"
    git push origin v1.0.0
    
    # 合并回 develop
    git checkout develop
    git merge --no-ff release/v1.0.0
    
    # 删除 release 分支
    git branch -d release/v1.0.0
    git push origin --delete release/v1.0.0
    
  3. 总结 ✅ release 分支确保代码质量,在 main 发布前进行充分测试。 ✅ release 期间不加新功能,只修 Bug,保证版本稳定。 ✅ 发布后,合并 releasemaindevelop,并删除 release 分支。 ✅ 每个发布版本都有 清晰的 Tag 记录,方便回滚和维护。

3. Fix 分支管理规范 (fix/*)

fix/* 分支用于修复 开发过程中发现的 Bug,这些 Bug 可能影响 develop 分支的开发,但不属于紧急线上修复(紧急修复使用 hotfix/*)。 1. 何时使用 fix/* 分支?

✅ 在开发过程中,发现 非紧急 的 Bug,需要修复并合并到 develop

✅ 可能是团队测试、代码 Review 过程中发现的问题。

不直接修复 main 上的 Bug,而是修复 develop,等下个版本发布。

✅ 适用于 回归测试 Bug 修复、优化 UI 细节、修正逻辑错误 等。

  1. Fix 分支的完整流程

    # 从 develop 创建 fix/* 分支
    git checkout develop
    git pull origin develop
    git checkout -b fix/login-bug
    
    # 进行修复
    git add .
    git commit -m "fix(auth): 修复登录状态异常问题"
    git push origin fix/login-bug
    
    # 提交 PR,合并到 develop
    git checkout develop
    git merge --no-ff fix/login-bug
    
    # 删除 fix/* 分支
    git branch -d fix/login-bug
    git push origin --delete fix/login-bug
    
  2. 适用场景

    代码 Review 发现 Bug

    测试阶段发现 UI/逻辑错误

    某个 feature 分支合并后导致的小问题

  3. 总结 ✅ fix/* 用于修复 开发阶段 发现的 Bug,合并到 develop。 ✅ fix/*Code Review + CI 测试,保证修复有效。 ✅ fix/* 不影响线上,不像 hotfix/* 需要紧急修复。 ✅ 修复完成后 删除 fix 分支,保持仓库整洁。

4. Hotfix 分支管理规范 (hotfix/*) 🚑

hotfix/* 分支用于 紧急修复线上 Bug,通常是 生产环境(main 分支)已发布版本 发现 严重问题,需要立即修复并发布补丁版本1. 何时使用 hotfix/* 分支?

线上(production)环境发现严重 Bug,必须紧急修复。

影响用户正常使用(如支付失败、数据丢失、服务崩溃)。

必须立即修复,不能等下个正式版本发布

修复后,需合并到 main 并打 Tag 作为补丁版本,同时同步 develop

  1. Hotfix 分支的完整流程

    # 确保 main 最新
    git checkout main
    git pull origin main
    
    # 创建 hotfix 分支
    git checkout -b hotfix/fix-login-v1.0.1
    # hotfix/fix-login-v1.0.1 说明:
    #  这是 紧急修复(hotfix)
    #  修复的是登录相关问题(fix-login)
    #  补丁版本号 v1.0.1(当前线上是 v1.0.0)
    
    # 修复 & 提交
    git add .
    git commit -m "fix(auth): 修复线上登录崩溃问题"
    git push origin hotfix/fix-login-v1.0.1
    
    # 提交 PR,合并到 main
    #  在 GitHub/GitLab 提交 PR,请求合并到 main。
    #  必须经过 Code Review,确保修复安全。
    #  测试通过后,合并到 main:
    git checkout main
    git merge --no-ff hotfix/fix-login-v1.0.1
    git push origin main
    
    # 打补丁 Tag
    git tag -a v1.0.1 -m "Hotfix: 修复登录崩溃问题"
    git push origin v1.0.1
    
    # 合并到 develop
    git checkout develop
    git merge --no-ff hotfix/fix-login-v1.0.1
    git push origin develop
    
    # 删除 hotfix 分支
    git branch -d hotfix/fix-login-v1.0.1
    git push origin --delete hotfix/fix-login-v1.0.1
    
  2. 适用场景

    线上用户反馈 Bug,影响正常使用

    支付、登录、数据丢失等重大问题

    需要尽快修复并发布补丁版本

  3. 总结 ✅ hotfix/* 仅用于 紧急修复线上 Bug,不能等下个版本。 ✅ 必须打 Tag,作为补丁版本(如 v1.0.1)。 ✅ 修复后同步 develop,避免以后版本再次出现问题。 ✅ 删除 hotfix 分支,保持仓库整洁。

5. Develop 分支管理规范 (develop) 🚀

develop 分支是 主要的开发分支,所有新功能 (feature/*) 和 Bug 修复 (fix/*) 都先合并到 develop,然后再从 develop 创建 Release 版本release/*)进行预发布。 1. develop 分支的作用

所有新功能(feature/*)和 Bug 修复(fix/*)的集成分支

定期创建 release/* 分支,进行预发布测试

hotfix/* 修复完成后,也需要同步到 develop,防止 Bug 反复出现

不直接在 develop 上开发新功能,必须新建 feature/*fix/*

  1. develop 分支的合并流程

    # 开发阶段
    # 1. 确保 develop 分支最新
    git checkout develop
    git pull origin develop
    
    # 2. 创建 feature/* 进行功能开发
    git checkout -b feature/user-auth
    
    # 3. 完成开发后,合并 feature/* 到 develop
    git checkout develop
    git merge --no-ff feature/user-auth
    git push origin develop
    
    # 进入 release/* 预发布阶段
    # 1. develop 代码稳定后,创建 release/*
    git checkout develop
    git pull origin develop
    git checkout -b release/v1.0.0
    git push origin release/v1.0.0
    
    # 2. release/* 分支进行测试 & 修复 Bug
    # + 发现 Bug,直接在 release/* 上修复:
    git add .
    git commit -m "fix: 修复登录 Bug"
    git push origin release/v1.0.0
    
    # + 如果是重大 Bug,可以让 fix/* 分支修复,然后合并进 release/*:
    git checkout -b fix/login-bug
    # 修复 Bug
    git add .
    git commit -m "fix: 登录崩溃修复"
    git push origin fix/login-bug
    git checkout release/v1.0.0
    git merge --no-ff fix/login-bug
    git push origin release/v1.0.0
    
    #  发布正式版本
    # release/* 通过测试后,合并到 main 并打 Tag
    git checkout main
    git pull origin main
    git merge --no-ff release/v1.0.0
    git tag -a v1.0.0 -m "Release v1.0.0"
    git push origin v1.0.0
    git push origin main
    
    # 反向合并 release/* 到 develop
    # ⚠️ 重要:避免 develop 落后于 main!
    git checkout develop
    git merge --no-ff release/v1.0.0
    git push origin develop
    
    # 删除 release 分支
    git branch -d release/v1.0.0
    git push origin --delete release/v1.0.0
    
  2. 适用场景

    所有新功能 (feature/*) 和 Bug 修复 (fix/*) 必须先合并到 develop

    开发完成后,从 develop 创建 release/* 进行预发布

    线上紧急修复 (hotfix/*) 完成后,也要同步合并到 develop

  3. 总结

    develop开发主干,所有新功能 (feature/*) 和 Bug 修复 (fix/*) 都合并到这里。

    不能直接在 develop 开发,必须新建 feature/*fix/*

    develop 定期创建 release/* 进行预发布,确保代码稳定性。

    线上 Bug (hotfix/*) 修复后,也要同步回 develop,防止 Bug 复现

代码合并 & PR 规范

  • 必须通过 PR 合并分支,避免直接推送到 maindevelop
  • 至少一名成员 Code Review 通过后再合并
  • PR 说明清晰,包含背景、变更内容、影响范围
  • 删除已合并的功能分支,保持仓库整洁:
git branch -d feature/new-feature
git push origin --delete feature/new-feature

其他建议

  • 使用 .gitignore,避免提交不必要的文件。

  • 定期 Rebase 或 Merge,减少冲突:

    git fetch origin
    git rebase origin/develop
    
  • Commit 颗粒度适中,避免提交过大或过小的变更。

  • 保持 commit 记录清晰,避免 fix typoupdate 这类无意义的提交信息。

总结

  1. 分支管理:使用 main / develop / feature/* / fix/* / hotfix/* 规范化管理。
  2. 代码提交:采用 feat, fix, docs 等格式,清晰描述变更。
  3. 合并流程:所有改动必须通过 PR,并通过 Code Review 后合并。
  4. 版本管理:使用 git tag 进行版本控制。
  5. 冲突处理:遇到冲突时手动修复,并 git rebase 保持提交整洁。
  6. CI/CD:使用 GitHub Actions / GitLab CI 自动化测试与部署。
  7. Git Hooks:使用 husky 强制执行代码质量检查。

简化

在一个只有两个人的小团队中,可以简化Git开发流程,无需使用合并请求(Pull Request)这一步骤,因为合并请求通常用于多人协作时的代码审查和讨论。以下是一个适用于小团队的简化Git开发流程:

  1. 克隆仓库:每位开发者从远程仓库克隆代码库到本地。这可以通过**git clone**命令完成。

  2. 创建分支:每位开发者在开始工作之前,可以创建一个新的分支,以便在不影响主分支的情况下进行开发。分支的命名通常应该清晰明了,反映出正在解决的问题或功能的特性。

    git checkout -b feature-branch
    
  3. 开发:在分支上进行代码的修改和开发。持续地进行提交(commit)以保存工作的进展。

    git add .
    git commit -m "添加了新特性"
    
  4. 拉取远程更新:在开始工作之前,以及在提交代码之前,务必从远程仓库拉取最新的更改,以避免冲突。

    git pull origin main
    
  5. 测试:在提交之前,确保代码通过单元测试、集成测试等必要的测试。确保代码不会破坏现有功能。

  6. 提交:将代码提交到本地分支。

    git add .
    git commit -m "完成了特性X"
    
  7. 推送:将本地分支推送到远程仓库。

    git push origin feature-branch
    
  8. 合并到主分支:在小团队中,可以相对容易地协调合并工作。开发者可以在本地合并分支到主分支(通常是**mainmaster**)。

    git checkout main
    git merge feature-branch
    
  9. 删除分支:完成合并后,可以删除特性分支。

    git branch -d feature-branch
    

这个简化的流程适用于小团队,其中没有严格的代码审查和多人协作的要求。但请注意,虽然没有合并请求,但仍然应该保持团队之间的沟通和协作,以确保代码质量和一致性。此外,定期备份和维护远程仓库以防止数据丢失也很重要。