规范 Git 分支开发流程(Git 团队协作指南)

适用于:团队成员对 Git 仓库具有直接写权限的协作场景
文档类型:正式规范(企业内部使用风格)
版本:v1.0
修订日期:2025-11-22


1. 目的

本指南旨在统一团队在 Git 项目开发过程中的 Git 分支使用规范,确保代码协作有序开展、历史记录清晰、避免冲突与冗余分支,提高开发效率与交付质量。


2. 基本概念

名称 说明
主干分支(main/master) 项目稳定分支,仅用于发布稳定版本和受控合并
功能分支(feature/*) 用于开发新功能,完成后通过 PR 合并主干
修复分支(fix/*) 用于修复非紧急类缺陷
紧急修复分支(hotfix/*) 用于紧急修复生产环境问题
提交(Commit) 记录代码变更的基础单位,应保持小步提交、信息规范
推送(Push) 将本地分支提交同步到远程仓库
重基(Rebase) 将当前分支提交移到最新主干提交之后,以保持历史线性
上游关系(Upstream) 本地分支与远程分支建立的追踪关系

备注:本文档主要包含 feature 分支工作模式,不含 Fork 工作流。


3. 分支策略与命名规范

3.1 分支分类

分支类别 用途 示例
main 稳定主干分支,禁止直接开发与提交 main
feature/* 新功能开发,完成后通过 PR 合并 feature/user-login
fix/* 修复一般问题 fix/password-reset
hotfix/* 修复紧急线上问题 hotfix/null-pointer
chore/* 杂项工作、依赖升级、构建配置 chore/upgrade-deps
docs/* 文档相关工作 docs/api-guide

3.2 功能分支命名要求

  • 使用短横线 - 分隔单词
  • 命名应表达该分支对应的功能内容
    feature/user-comment
    feature/dev1test_branch

4. 标准开发流程(适用于有写权限的团队协作)

以下流程为规范操作步骤,所有开发工作应遵循:

步骤 1:从主干创建功能分支

git switch main
git pull --ff-only
git switch -c feature/<feature-name>

步骤 2:本地开发与提交

git add -p
git commit -m "feat(<scope>): <description>"

提交信息建议遵循 Conventional Commits(见附录 7)。

步骤 3:定期与主干同步(避免冲突)

在功能开发周期中,如主干有更新,需同步:

git fetch origin
git rebase origin/main

说明:

  • git fetch origin 获取远程所有更新(不改变本地当前分支)
  • git rebase origin/main 将当前分支的提交移动到最新 main 之后,提前解决冲突

步骤 4:首次推送并建立上游关系

git push -u origin feature/<feature-name>

说明:

  • -u 用于为当前分支建立 upstream 追踪关系
  • 建立后后续可直接使用 git push / git pull 无需再指定远端和分支名

步骤 5:发起合并请求(PR/MR)

在远程仓库创建 PR,说明变更内容、测试情况及影响范围,等待评审与 CI 测试通过。

开发期间如需继续更新,只需继续 commit + push 即可更新 PR。

步骤 6:PR 合并后清理分支

远程 PR 合并后,需删除本地与远程分支:

# 删除本地分支
git switch main
git pull --ff-only
git branch -d feature/<feature-name>

# 删除远程分支
git push origin -d feature/<feature-name>

# 清理已不存在的远程分支引用
git fetch -p

5. 各关键操作说明(含原问题解答)

5.1 为什么需要在本地新建分支进行开发?

  • 保持主干稳定,避免出现不可控问题
  • 每个功能独立开发,方便测试、审查与回滚
  • 避免多人开发相互影响

5.2 为什么需要推送功能分支到远端?

  • 便于团队协作、代码审查、CI 检查
  • 不会造成仓库混乱,因为合并后会删除
  • 推送分支是规范流程,而不是将开发留在本地

5.3 git push -u 的意义

  • 建立本地分支与远程分支的追踪关系
  • 之后可直接执行 git pull / git push 而无需带参数

若忘记添加,可补救:

git branch --set-upstream-to=origin/feature/<feature-name>

5.4 git fetch origin 的作用

  • 更新远程状态到本地(包括所有远端分支)
  • 不影响当前开发分支
  • 为后续 rebase 提供最新的主干指针

5.5 git rebase origin/main 的作用

  • 将当前分支基于最新 main 更新,减少合并冲突
  • 使提交历史更清晰(线性)
  • 在本地提前解决冲突,更利于 PR 合并

5.6 是否必须推送开发分支到远程?

是的。推送远程后:

  • 可创建 PR,接受评审
  • 避免因本地损坏丢失代码
  • 合并后删除即可,不会污染仓库

5.7 错误说明:refs/remotes/origin/HEAD cannot be resolved

出现原因:命令写法错误,例如:

git push origin -u origin feature/test-api   # 错误示例

正确命令应为:

git push -u origin feature/test-api

或当前分支下:

git push -u origin HEAD

6. 分支清理与维护规范

  • 所有 feature/* 分支必须在合并后删除
  • 本地与远端均需删除
  • 定期清理本地与远程跟踪引用

7. 提交信息规范(建议)

推荐使用 Conventional Commits 格式:

<type>(<scope>): <description>

常用类型:

类型 用途
feat 新功能
fix 修复缺陷
docs 文档变更
style 格式变动(不影响逻辑)
refactor 重构代码
test 测试相关
chore 构建、工具、依赖升级

示例:

feat(auth): add JWT login endpoint
fix(api): resolve null pointer on user info fetch

8. 常用命令清单(按阶段)

初始化

git clone <repo-url>
git switch main
git pull --ff-only

创建分支

git switch -c feature/<name>

开发期间

git add -p
git commit -m "feat: xxx"
git fetch origin
git rebase origin/main

推送与更新

git push -u origin feature/<name>
git push --force-with-lease    # 若有 rebase

合并后清理

git switch main
git pull --ff-only
git branch -d feature/<name>
git push origin -d feature/<name>
git fetch -p

9. 总结

  • 所有开发必须基于 feature/* 分支进行
  • 主干代码禁止直接开发与提交
  • 推送功能分支到远端是规范流程,不会造成混乱
  • 合并后应删除远端与本地分支,保持仓库整洁
  • 使用 fetch + rebase 减少冲突,保持历史线性
  • -u 用于建立上游关系,推荐使用

(完)