大型项目 Git 操作与推送规范

简介: 本规范为生产级、公司级强制执行标准,适配Vue3+NestJS前后端分离项目,基于简化Git-Flow搭建,通过「本地Hooks校验+服务端CI兜底」双重防护,统一团队Git工作流,彻底解决分支混乱、提交不规范、代码污染、版本回溯失效等问题,满足研发合规与审计要求。

大型项目 Git 操作与推送规范

适配 Vue3 + NestJS 前后端分离项目,基于简化 Git-Flow 工作流,强制执行线性提交历史、规范分支命名、标准化提交信息、安全推送与回滚,配套本地 Git Hooks 自动校验与服务端 CI 兜底,从源头杜绝团队 Git 混乱问题。


一、分支管理规则(全员强制)

所有公共分支禁止本地直接推送,仅可通过 PR/MR 合并;个人功能分支自主管理,严格遵循命名规范。

分支名称 核心作用 推送与合并权限规则
master 主干,生产环境稳定代码,随时可部署上线 禁止直接 Push;仅允许 feature/release/hotfix 分支通过 PR/MR 合并(Gitee 分支保护)
feature/xxx 业务功能开发分支,统一从 master 迁出 原则上由开发者本人推送、管理;如需结对/临时协作协助推送,须在分支命名中增加协作者标识(如 feature/user-module-coop)或在 PR/MR 描述中备注协作人员
release/vx.y.z 版本预发布、测试、验收分支,从 master 拉出 仅允许修复测试 Bug,严禁新增任何业务功能
hotfix/xxx 线上生产紧急 Bug 修复,从 master 迁出 修复完成后合并回 master;若存在进行中的 release 分支,必须同步合并至 release(Hotfix 双分支合并流程,见编码规范 §10.1),避免版本丢修复

注:develop 集成分支在本项目暂不引入(单主干 + squash 合并已满足当前团队规模),后续团队扩容或需长期并行多版本时再评估引入并升版本文档。

1.1 分支命名强制规范(刚性要求)

统一采用全小写 + 短横线分隔(kebab-case),禁止中文、大写字母、下划线、空格、特殊符号,兼容 Windows 终端、CI/CD 流水线、服务器脚本,杜绝编码解析异常。hotfix 分支必须包含问题编号或故障关键词,禁止无意义纯数字命名(示例:hotfix/login-npe-fixhotfix/order-500-error)。

# ✅ 标准正确示例
feature/user-module
feature/exam-score-calc
hotfix/redis-connection-pool-bug
release/v2.1.0

# ❌ 严格禁止示例
feature/用户模块
feature/Exam_Score
feature/user_module
hotfix/RedisBug

二、提交信息规范(Commit Message)

2.1 标准格式

<类型>(<范围>): <简短清晰描述>

提交类型 使用场景说明
feat 新增业务功能、新增接口、新增页面
fix 修复功能 Bug、线上问题、逻辑异常
docs 仅修改文档、注释、说明文本,无代码逻辑变更
style 代码格式化、空格、缩进调整,无功能、逻辑变更
refactor 代码重构、逻辑优化,无新增功能、无 Bug 修复
perf 性能优化、接口提速、资源压缩、渲染优化
test 新增、修改单元测试、接口测试代码
build 构建系统 / 依赖变更
ci CI 配置变更
chore 工程配置、杂项(不属于以上任何类别)
revert 回滚提交

完整类型枚举与 body 格式以编码规范 §10.2 Conventional Commits 为准;subject 不超过 50 字符,项目优先中文。

2.2 原子提交铁律(核心红线)

一个 Commit 只解决一个独立逻辑问题,严禁混合提交(修复 Bug 夹杂新功能、多模块无关改动合并一次提交),违规需拆分后重新提交。

2.3 规范示例

feat(exam): 新增万人考试异步判分接口
fix(redis): 修复高并发下连接池耗尽问题
chore(docker): 更新 wsl-nginx 部署配置

❌ 严格禁止:更新代码修复问题优化代码111 等无意义、模糊化提交信息。


三、标准开发推送流程(全员统一,唯一标准)

核心原则:强制 fetch + rebase,全程保持线性干净提交历史,彻底杜绝多余 Merge 污染分支,团队统一唯一工作流。

# 1. 切换个人功能分支
git checkout feature/xxx

# 1.5 多设备/多人协作分支必须同步自身远端分支
# 独占本地分支可跳过,跨设备、协作者开发必须执行
git pull origin feature/xxx --rebase

# 2. 拉取远端所有最新代码(仅拉取不合并)
git fetch origin

# 3. 基于远端 master 变基,同步最新主干代码
git rebase origin/master

# ⚠️ Rebase 冲突标准处理
# 1. 手动解决文件内所有冲突标记
# 2. 标记已解决文件
git add .
# 3. 继续变基流程(禁止直接新建 commit 掩盖冲突)
git rebase --continue
# 放弃本次变基(改动废弃场景)
git rebase --abort
# 跳过当前冲突提交(极少场景使用)
git rebase --skip

# 4. 核对本地代码变更
git status
git diff

# 5. 精准提交(优先指定文件,杜绝全量盲目提交)
git add src/xxx.ts

# 6. 规范提交代码
git commit -m "feat(模块): 具体功能描述"

# 7. 推送远端分支(首次推送新建远程分支,后续迭代直接 git push)
git push -u origin feature/xxx

3.1 .gitignore 强制要求

环境变量、密钥、IDE 配置、编译产物、日志文件严禁提交,完整清单与例外规则以编码规范 §10.3 为唯一权威口径(含 .env.docker.example 例外、server/uploads/、大二进制文件 10MB 上限),不再单独维护简版清单。


四、PR/MR 合并规范(区分分支来源 · 强制合并策略)

根据不同分支类型,严格区分 PR 目标分支、合并策略,所有合并操作必须通过平台 PR/MR 完成,禁止本地直接合并推送公共分支。

4.1 功能分支(feature/xxx)合入 master

  • 目标分支:统一选择 master
  • 合并策略:强制使用 Squash and Merge(压缩合并),将功能分支所有零散开发提交压缩为一条完整、规范的功能提交,彻底清理开发过程中的琐碎迭代记录,保证主干历史极简干净
  • 前置要求:发起 PR/MR 前,必须完成 rebase origin/master 同步主干代码、解决全部冲突,禁止携带冲突、滞后代码提合并

4.2 发布/热修复分支(release/vx.y.z、hotfix/xxx)合入 master

  • 目标分支:统一选择 master
  • 合并策略:使用 Create a merge commit(保留独立合并节点),清晰留存版本发布、线上热修复的完整记录,便于后续版本回溯、问题溯源
  • 若存在进行中的 release 分支,按 Hotfix 双分支合并流程先合 release 验证再回合 master,双分支同步后确认无差异遗漏(编码规范 §10.1)

4.3 通用强制执行要求

  1. 提交 PR/MR 时,完善填写变更内容、功能实现说明、自测结果、关联需求/问题工单号,指定专属代码审核人;AI 辅助生成代码须在 PR 描述中标注(编码规范 §16)
  2. 所有变更必须通过代码评审、无异议后方可执行合并,严禁私自合并;评审人须核验门禁命令执行日志(过渡期要求,编码规范 §15)
  3. 合并完成后必须清理远端废弃分支:平台勾选「删除源分支」,或手动执行 git push origin --delete <分支名>,杜绝远程无效分支堆积
  4. Squash 合并追溯规范:PR 标题必须精准概括全部功能变更,严禁使用「合并代码」「更新代码」等模糊描述;PR 描述中必须附带功能分支核心提交列表或完整变更摘要,保障代码追溯、git blame 信息可溯源

五、操作红线禁止规则(违规直接回滚整改)

  • ❌ 禁止直接 git push 推送 master / release 所有公共分支
  • ❌ 禁止提交 .env、私钥、数据库密码、接口密钥等敏感隐私配置(编码规范 §11.1 红线)
  • ❌ 禁止推送编译报错、运行异常、功能残缺的无效代码
  • ❌ 禁止对 master 分支执行 git push -f 强制推送(无任何豁免)
  • ✅ 个人独占、未多人协作的 feature 分支,特殊场景需覆盖历史,必须使用安全指令git push --force-with-lease(校验远端更新,杜绝误覆盖他人代码)
  • ✅ 多人协作分支,全程禁止任何强制推送操作

六、代码冲突标准处理方案

团队统一使用 Rebase 模式,废弃单纯 Merge 模式,保证历史整洁统一。

# 同步主干并变基
git fetch origin
git rebase origin/master

# 手动解决所有冲突后执行
git add .
git rebase --continue

# 放弃本次变基操作
git rebase --abort

核心要求:禁止解决冲突后直接手动 commit 提交,必须通过 --continue 完成流程,保留完整提交链路。


七、错误推送回滚方案(分场景、零事故)

7.1 场景一:本地/私有独占 feature 分支(可重置历史)

仅适用于未被他人拉取、单人独占的私有分支:

git log --oneline
git reset --hard <commit-id>
git push --force-with-lease

7.2 场景二:公共分支(master/release)已推送远端(安全回滚)

严禁 reset + 强制推送,使用 revert 生成反向提交,不破坏团队公共历史,全员可正常同步代码。

# 普通提交回滚
git log --oneline
git revert <错误commit-id>
git push origin master

# 合并提交(Merge Commit)专属回滚(必须加 -m 参数)
# -m 1 含义:保留第一个父节点(默认为主干 master),仅撤销分支合并进来的改动
# 不确定父节点顺序时,执行 git show <merge-commit-id> 查看父节点列表,避免回滚错乱
git revert -m 1 <merge-commit-id>
git push origin master

八、自动化 Git Hooks 强制校验(源头拦截违规操作)

通过本地钩子脚本,自动拦截不规范分支名、不合法提交信息,无需人工审核,自动落地规范。落地方式:钩子脚本入库 scripts/git-hooks/,随 husky(计划 2026-Q3)接管;husky 就绪前可手动复制到 .git/hooks/ 过渡。

8.1 分支名校验脚本(pre-commit)

#!/bin/bash
# 强制校验分支命名规范,支持临时跳过机制

BRANCH_NAME=$(git branch --show-current)

# 紧急场景可临时跳过校验:SKIP_BRANCH_CHECK=1 git commit -m "xxx"
if [ "$SKIP_BRANCH_CHECK" = "1" ]; then
    exit 0
fi

# 豁免公共分支(master/release):公共分支禁止本地提交推送(第五章红线),
# 本地临时提交(如配合 SKIP 机制修复历史)不应被命名规则误杀
if echo "$BRANCH_NAME" | grep -qE '^(master|release/v[0-9]+\.[0-9]+\.[0-9]+)$'; then
    exit 0
fi

# 多级分支名(如 feature/xxx-coop)允许斜杠分段
if ! echo "$BRANCH_NAME" | grep -qE '^(feature|hotfix)/[a-z0-9]+([-/][a-z0-9]+)*$|^release/v[0-9]+\.[0-9]+\.[0-9]+$'; then
    echo "❌ 提交失败:当前分支命名不规范!"
    echo "当前分支:$BRANCH_NAME"
    echo "规范格式:feature/xxx、hotfix/xxx、release/vx.y.z(全小写、连字符分隔)"
    echo "紧急跳过:SKIP_BRANCH_CHECK=1 git commit -m \"你的提交信息\""
    exit 1
fi

exit 0

8.2 提交信息校验脚本(commit-msg)

#!/bin/bash
# 强制校验 commit 提交信息格式

COMMIT_MSG_FILE="$1"
FIRST_LINE=$(head -n 1 "$COMMIT_MSG_FILE")

# 紧急场景可临时跳过校验:SKIP_COMMIT_CHECK=1 git commit -m "xxx"
if [ "$SKIP_COMMIT_CHECK" = "1" ]; then
    exit 0
fi

# 豁免 git 自动生成提交(merge/revert/fixup 等),避免误杀
if echo "$FIRST_LINE" | grep -qE '^(Merge|Revert|fixup!|squash!)'; then
    exit 0
fi

# 仅校验首行,支持多行 body(与 Conventional Commits 格式一致)
if ! echo "$FIRST_LINE" | grep -qE '^(feat|fix|docs|style|refactor|perf|test|build|ci|chore|revert)(\(.+\))?: .+'; then
    echo "❌ 提交失败:Commit 信息不符合团队规范!"
    echo "当前提交:$FIRST_LINE"
    echo "标准格式:类型(模块): 简短描述"
    echo "示例:feat(user): 新增用户登录功能"
    echo "紧急跳过:SKIP_COMMIT_CHECK=1 git commit -m \"你的提交信息\""
    exit 1
fi

exit 0

8.3 一键安装授权命令(项目根目录执行,Windows 请使用 Git Bash / WSL 终端)

# 先校验钩子脚本文件是否存在,避免 CI 环境、新克隆项目执行报错
if [ ! -f ".git/hooks/pre-commit" ] || [ ! -f ".git/hooks/commit-msg" ]; then
    echo "❌ 钩子脚本文件不存在,请先将 scripts/git-hooks/ 下的脚本复制到 .git/hooks/ 目录"
    exit 1
fi

# 赋予钩子脚本执行权限,自动适配 Linux/Mac/Windows Git 环境
chmod +x .git/hooks/pre-commit .git/hooks/commit-msg

# 脚本有效性校验(防止文件缺失、命名错误导致校验失效)
if [ -x ".git/hooks/pre-commit" ] && [ -x ".git/hooks/commit-msg" ]; then
    echo "✅ Git 自动化校验钩子安装并授权成功"
else
    echo "❌ 钩子脚本安装失败,请检查文件是否存在、命名是否正确"
    exit 1
fi

8.4 全局提交模板配置(可选)

支持全局与项目级双模板优先级配置:全局模板为用户根目录 ~/.gitmessage,全项目通用;项目级私有模板命名为 .gitmessage.local,必须加入 .gitignore 忽略,杜绝误提交至代码仓库。项目级模板优先级高于全局模板。

# <类型>(<模块>): 简短描述
# 关联: #ISSUE-编号
# 合法类型: feat/fix/docs/style/refactor/perf/test/build/ci/chore/revert
# 全局模板配置(全项目生效)
git config --global commit.template ~/.gitmessage

# 项目级模板配置(仅当前项目生效,优先级更高)
git config --local commit.template .gitmessage.local

九、服务端 CI 兜底校验(最终安全防线)

本地 Git Hooks 可被人为跳过(删除脚本、SKIP 环境变量跳过参数),为杜绝违规代码入库、实现合规闭环,必须配置服务端 CI 流水线强制校验(Gitee Actions,对齐编码规范 §15 门禁规范,计划 2026-Q3),所有远端推送、PR/MR 合并均由服务端二次校验,无法绕过,作为团队规范最后一道安全防线。

落地状态(v1.1):兜底校验已实现为 scripts/ci-git-guard.sh 并接入 CI 流水线 git-guard job(.github/workflows/ci.yml,任意分支推送触发,needs 阻断后续构建);管理员豁免经 secrets 注入 GIT_GUARD_EXEMPT=1;敏感文件口径:仅拦截新增(server/.env 为历史遗留已跟踪文件,含 7 项密钥,存量变更另行治理);三场景实测(非法分支名/非法提交信息/新增敏感文件)均拦截成功。

9.1 CI 核心校验规则(强制启用)

触发条件:任意分支推送代码、提交 PR/MR 时自动触发。

  1. 分支命名合法性校验:严格匹配规范分支格式,拒绝非法命名分支推送,规则同本地 Hooks:仅允许 feature/xxx、hotfix/xxx、release/vx.y.z 规范分支,禁止中文、大写、特殊符号、非法前缀
  2. Commit 信息格式校验:遍历本次推送新增 commit 记录,强制校验提交信息格式,拦截无意义、不规范提交(如 更新代码修复问题111 等模糊描述),严格匹配 type(scope): desc 规范格式
  3. 禁止敏感文件提交校验:拦截 .env、密钥、私钥、数据库配置等敏感文件推送,杜绝隐私信息泄露风险(与编码规范 §10.3 / §11.1 红线联动)
  4. 既有门禁项pnpm lint --max-warnings 0 / pnpm format:check / pnpm type-check / pnpm test / pnpm audit --audit-level high(编码规范 §15.1)

9.2 流水线拦截逻辑

  1. 任意一项校验不通过,直接终止 CI 流水线、拦截代码合并、阻断版本入库
  2. 输出明确错误日志,提示违规类型、修改规范,引导开发者整改后重新推送
  3. 仅管理员可特殊豁免(生产紧急故障兜底,留审计日志),常规场景全员强制校验

9.3 落地价值

  • 彻底杜绝「本地跳过 Hooks、远端违规入库」的漏洞
  • 实现本地主动校验 + 服务端强制兜底的双重防护体系
  • 统一合并策略:feature 合入 master 使用 Squash 压缩合并,hotfix/release 合入 master 使用保留节点合并

十、团队落地检查清单(必做)

  • ✅ 将本规范录入项目 Wiki、README 指引,全员熟读执行
  • ✅ 代码仓库开启分支保护:master 禁止直接推送,强制开启 PR/MR + 代码评审(Gitee 仓库保护)
  • ✅ 所有团队成员安装本地 Git Hooks 校验脚本(§8.3)
  • ✅ 团队统一唯一工作流:全程 fetch + rebase,废弃 merge 合并开发模式
  • ✅ 公共分支回滚统一使用 revert,禁止 reset 强制推送
  • ✅ 强制删除合并完成的远端废弃 feature 分支
  • ✅ 开启服务端 CI 兜底校验(§9),拦截本地 Hooks 绕过违规提交

十一、审核修订记录(原提案 → 本规范定稿)

序号 原提案内容 修订结果 理由
R1 main + develop 双主干简化 Git-Flow 对齐 master 单主干;develop 暂不引入(第一章注) 项目现状仅 master 单主干,双主干与 squash 合并回 master 的既有实践冲突
R2 提交类型 8 类(无 build/ci/revert) 完整枚举对齐 Conventional Commits 共 11 类 与编码规范 §10.2 及项目既有实践一致
R3 分支正则 ^[a-z0-9][-a-z0-9]*$ 不支持斜杠 改为 ^[a-z0-9]+([-/][a-z0-9]+)*$ 支持多级分支名 原正则误杀 feature/user-module-coop 等协作分支(与原提案协作者标识条款自相矛盾)
R4 commit-msg 钩子 cat "$1" 全量匹配 改为仅校验首行 + 豁免 Merge/Revert/fixup/squash 前缀 多行提交(body/合并提交)会被原脚本误杀
R5 .gitignore 简版清单 以编码规范 §10.3 为唯一权威口径(§3.1) 项目 .gitignore 已含 .env.docker.example 例外、uploads/、大文件约束,简版会造成口径割裂
R6 反向同步 main→develop(merge 模式) 删除(无 develop 分支;release/hotfix 合 master 后按 Hotfix 双分支同步流程处理) 分支模型对齐后该条款无适用对象
R7 钩子直接放 .git/hooks 口头分发 脚本入库 scripts/git-hooks/,随 husky 接管(2026-Q3) 与编码规范落地配套说明 husky 计划对齐,避免脚本脱离版本管理
R8 「CI 兜底」未指明平台 对齐 Gitee Actions 门禁清单(§9) 与既有门禁规范合并,避免两套 CI 口径
R9 尾部「部分内容可能由 AI 生成」标注 保留留痕于本节 编码规范 §16 常规项:AI 生成内容须标注并人工审查
R10 pre-commit 钩子未豁免 master/release 公共分支(实测发现:在 master 提交被误杀) 补充公共分支豁免逻辑(§8.1) 公共分支本就禁止本地提交推送(§五),命名校验仅适用开发分支;v1.1 实测修复

注:原提案尾部标注「部分内容可能由 AI 生成」,本规范(1.1版本)已经人工逐条审核修订(上表 R1~R10)并在项目进行了实测验证,未发现任何问题。


文档维护负责人:午阳方舟
变更评审人:清流人间
修订日期:2026-08-15

相关文章
|
9天前
|
存储 弹性计算 缓存
阿里云服务器租赁费用:新版租赁收费标准及活动报价参考
本文更新了2026年阿里云全系列云服务器租赁活动报价,所有特惠资源均可前往阿里云活动中心选购,整体覆盖从个人入门到企业级高性能场景的全梯度需求。其中轻量应用服务器主打极致性价比,2核2G峰值200M带宽配置每日10点、15点限时抢购价仅38元/年,2核4G配置379元/年起;高性价比的经济型e实例、通用算力型u2i实例覆盖2核4G至4核32G全档位,适配开发测试与中小型企业业务;搭载英特尔至强6处理器的第九代c9i企业级实例算力较上代提升20%,支撑高并发生产环境,不同实例规格价差清晰,用户可根据自身业务负载与预算灵活选型。
1926 119
阿里云服务器租赁费用:新版租赁收费标准及活动报价参考
|
11天前
|
人工智能 程序员 API
Codex 接入 DeepSeek-V4-Flash:还能补上识图,提供两套方案
Codex 接入 DeepSeek-V4-Flash 怎么配?本文覆盖 CLI 与桌面端,再用 qwen3-vl-flash 补识图,两套方案可直接照做
1493 13
|
16天前
|
云安全 人工智能 运维
阿里云联动百位企业安全专家,共识Agent防御最佳实践
当Agent成为新员工,你的安全边界在哪里?
1972 10
阿里云联动百位企业安全专家,共识Agent防御最佳实践
|
8天前
|
编解码 弹性计算 云计算
MiniMax-H3 视频生成模型 — 一键部署与使用指南
MiniMax-H3是MiniMax开源的33B全模态视频生成模型,支持文生视频、图生视频、参考生视频三种模式,原生输出2K/15秒带立体声音频视频,已原生适配ComfyUI,并可通过阿里云计算巢一键部署。(239字)
|
10天前
|
人工智能 JSON Shell
2026AI漫剧本地全开源方案(附各个软件模型链接),8G显卡也能流畅运行
这是一套完全本地化部署的AI漫剧生成技术链路:涵盖LLM剧本分镜生成、FLUX文生图(IP-Adapter人脸锁定)、StoryDiffusion时序连贯控制、LTX-2.3唇形同步视频生成,及ComfyUI全流程调度。零云端费用,仅耗硬件算力,单集2–4小时可产出竖屏短视频,适配抖音/B站分发。
|
9天前
|
人工智能 API 开发工具
2026 零基础本地 AI 漫剧完整实操教程(8G 笔记本显卡可用|附可直接复制命令与代码)
本方案提供完全离线、本地运行的漫剧全自动制作流程:RTX3060/4050 8G显卡即可驱动,涵盖Qwen写分镜→ComfyUI统一角色绘图→LTX2.3图生微动画→Qwen3-TTS本地配音→FFmpeg自动合成,全程无水印、免API、不限次。专为低显存优化,解决变脸、闪烁、爆内存三大痛点。(239字)
|
23天前
|
人工智能 前端开发 Linux
Codex 桌面版安装 + CC Switch 接入第三方 API 完整教程(2026 最新)
2026最新教程:手把手教你安装Codex桌面版,通过CC Switch v3.17.0一键接入Fenno等国产API(兼容OpenAI Responses格式),跳过账号登录,完整启用代码审查、多步任务与上下文感知功能。零基础友好,全程图文实操。(239字)
3496 5
|
10天前
|
编解码 人工智能 安全
2核4G/4核8G/8核16G阿里云服务器如何选择实例?经济型e、通用算力型u2i与计算型c9i选哪个?
本文介绍了阿里云2核4G、4核8G、8核16G三档主流配置下经济型e、通用算力型u2i和计算型c9i三种实例的最新活动价格与适用场景。同配置下三者价差显著,以2核4G为例,经济型e低至599.93元/年,计算型c9i则高达1742.08元/年。文章详细解析了各实例的性能定位:经济型e适合轻负载入门场景,u2i兼顾稳定算力与性价比,c9i凭借第9代至强处理器与芯片级安全能力支撑高性能业务。同时提示用户可叠加满减优惠券享受折上折,建议根据业务负载与预算综合决策。
555 113