开发时的 Git 规范,指的是在日常编码过程中,如何管理分支、提交代码、同步更新以及合并代码的一系列约定。下面我整理一份实用的 开发期 Git 工作流规范,帮助团队高效协作、避免历史混乱。
master/main始终保持稳定,禁止直接提交。- 所有开发都在分支上进行,通过合并请求(MR/PR)合并到主分支。
- 功能分支:
feat/功能描述(如feat/major-management) - 修复分支:
fix/问题描述(如fix/login-error) - 热修复分支:
hotfix/紧急问题(从主分支拉出,修复后合并回主分支和开发分支) - 命名规则:全小写,单词用短横线
-分隔,描述简洁明确。
- 从最新的主分支创建功能分支。
- 开发完成后,通过 MR/PR 合并回主分支,合并后删除功能分支(本地 + 远程)。
- 完成一个逻辑单元即可提交,不要攒一大堆代码再提交。
- 建议 每天至少提交一次,保持进度可追溯。
- 每次提交只做一件事:一个功能点、一个 Bug 修复、一次重构。
- 避免在同一个提交中混杂多种无关改动。
- 本地自测通过(编译、单元测试)。
- 使用
git status确认没有误提交临时文件(如.idea、node_modules)。 - 使用
git diff --cached检查即将提交的变更是否符合预期。
为了完美应对开发中多变的信息负载量,我们正式确立两类互补的提交风格。您可以根据本次提交的“综合体量”来科学决策选用:
- 模板结构:
类型(模块): 一句话精准陈述改动核心 - 命令行实操:
git commit -m "fix(ui): 修正侧栏折叠按钮文字在明亮模式下的超界问题" - 最佳应用场景:
- 原子化改动:本次仅修补了一个笔误、重构了单行逻辑,或调校了单个控件的视觉间距。
- 高自解释性:改动极度单纯,一句话即代表了事实的全部,无需追溯复杂的上下文。
- 日常微备份:作为在
dev分支高频开发的临时停靠点,为避免丢失进度而做的快照。
- 模板结构:
主标题: 一句话高度概括本组连环改动的最高意图 - 连环动作 1:细粒度展开,刻画具体的功能扩充细节 - 连环动作 2:指引与之匹配的周边联动修改或前置策略 - 配套归集:注明关联的优化案代号(如 S-5, U-4),帮助全链路追溯 - 命令行实操:
git commit -m "feat: 实现已完整文件展示、转封装、快捷键支持及多项体验优化" \ -m "- 实现「已完整文件」展示标签页,支持批量转封装到 mp4/mkv (M-3, V-3)" \ -m "- 支持单文件添加与拖拽 .m4s 文件支持 (M-4)" \ -m "- 降级 PySide6 至 6.9.3 解决崩溃并锁定依赖 (F-1, D-4)"
- 最佳应用场景:
- 会战大捷式合并:一次性交付了一整套互相关联的逻辑包(比如“侧栏看板+表格拉伸”组合拳)。
- 重大布局重构:底层动刀较多,需要向审查者(或未来的自己)提供一览全局的“改动大图纸”。
- 阶段性里程碑:作为功能合拢、发布前夕,或拉取 PR/MR 时最完美的交付报告单,方便日后自动化生成 changelog 文档。
| 考核维度 | 🍃 风格 A(灵动单行) | 🌲 风格 B(结构化多行) |
|---|---|---|
| 信息承载力 | 单一视角:聚焦于“做了什么”。 | 立体航拍:从“是什么”深入到“怎么做”和“为什么”。 |
| 首屏阅读成本 | 零负荷,如同浏览目录。 | 详实底蕴,提供清晰的问题归纳。 |
| 触发典型频次 | 日常开发高频穿插(日均 3-5 次)。 | 功能合龙、日末总结、或重大架构迭代完毕。 |
| Git 日志观感 | 如溪流般敏捷清脆,适合寻找细分切入点。 | 如史书般厚重严谨,每一页都是一篇开发简报。 |
git checkout master
git pull origin master
git checkout -b feat/xxx- 定期拉取主分支更新,避免最终合并时冲突过大:
git checkout master git pull origin master git checkout feat/xxx git merge master # 或 git rebase master - 推荐使用
git merge master,保持历史清晰,避免rebase带来的风险(尤其是分支已推送远程)。
- 功能开发完成后,推送分支到远程:
git push origin feat/xxx
- 在平台上创建 MR/PR,目标分支为
master。 - 填写清晰的标题和描述(包含改动内容、测试方式、影响范围)。
- 指定至少一名审查者。
- 审查者检查代码质量、规范、逻辑正确性。
- 如有修改意见,作者在功能分支上继续提交,MR/PR 会自动更新。
- 推荐使用 “Merge commit”(保留完整分支历史),避免使用 “Squash and merge”(除非团队约定)。
- 合并时可修改合并提交消息,让历史更清晰(如
feat(major): 合并专业管理功能)。
git checkout master
git pull origin master
git branch -d feat/xxx # 删除本地分支
git push origin --delete feat/xxx # 删除远程分支| 禁止操作 | 原因 |
|---|---|
直接向 master 提交 |
绕过审查,破坏稳定性 |
使用 git push --force |
覆盖远程历史,导致协作者丢失提交(除非是个人分支且明确需要) |
| 长期不拉取主分支更新 | 合并时冲突爆炸,难以解决 |
| 一次提交包含多个不相关功能 | 回滚困难,审查复杂 |
| 提交未测试的代码 | 引入 Bug,影响团队 |
- Pre-commit 钩子:使用
husky+lint-staged在提交前自动格式化代码、运行测试。 - Commitizen:用
git cz替代git commit,交互式生成规范消息。 - IDEA 集成:在 IDEA 中配置 Git 操作快捷键,使用可视化 Merge 工具解决冲突。
git checkout master
git pull origin master
git checkout -b feat/major-crud
# 开发...
git add .
git commit -m "feat(major): 添加专业列表查询"
# 继续开发...
git push origin feat/major-crud
# 创建 MR,等待审查git checkout master
git pull origin master
git checkout feat/major-crud
git merge master
# 解决冲突(若有)
git push origin feat/major-crud# MR 合并后
git checkout master
git pull origin master
git branch -d feat/major-crud
git push origin --delete feat/major-crud针对我们的中小型独立或双人迭代项目,推荐使用轻量级的 “双主分支 + 质检发布分支” 模型。这套模型可以完美衔接从 v0.1.0 雏形到 v0.2.0 成熟期的平滑跃迁。
| 分支角色 | 代表场景 | 状态特质 | 什么时候推送/更新? |
|---|---|---|---|
dev |
日常施工工地 🚧 | 功能激进但偶有瑕疵 | 高频。每完成一个打勾小任务,就 push 一次。 |
release/vX.X.X |
出厂前总质检车间 📦 | 冻结新功能,仅做捉虫与改号 | 功能封版(Feature Freeze)时。从 dev 拉出来做最后打磨。 |
main / master |
样板间与交钥匙区 🔑 | 100% 绝对稳定,对外分发 | 版本发布时。从 release 合入,象征着伟大的里程碑。 |
- 关卡 A:【创建 release/vX.X.X 的时机】
- 条件:迭代路线图中的功能已全部开发完毕(如 Phase 8 完成打勾),项目成员达成共识:本次绝对不再塞入新功能(冻结功能)。
- 关卡 B:【合并入 main / master 的时机】
- 条件:完成了全局链路跑通测试(冒烟测试),证明无恶性闪退、无破坏性交互逻辑漏洞。由产品核心决策者下达正式发布指令。
- 关卡 C:【打上历史丰碑(Version Tag)的时机】
- 条件:代码刚刚风光大嫁进
main分支,在此刻立刻打上带语义的标签(如v0.2.0),永冻历史状态。
- 条件:代码刚刚风光大嫁进
当您觉得我们在 dev 上的打磨已经足够,准备向全世界公布 v0.2.0 时,按照以下黄金序列,在终端顺序执行命令:
# 确保在最新的开发分支上
git checkout dev
git pull origin dev
# 瞬间拉出 v0.2.0 的专职质检车间
git checkout -b release/v0.2.0在此分支下进行最终的界面微调、版本号常量修改。改完后做最后一次提交:
git add .
git commit -m "chore(release): 升级软件版本文字至 0.2.0 并完成最终修饰"# 1. 如果本地还没有 main 分支,就新建一个(仅限首次):
git checkout -b main
# 2. 如果本地已经有 main,直接切过去:
git checkout main
# 3. 把完美的质检车间代码彻底融进样板间
git merge release/v0.2.0
# 4. 在 GitHub 远程服务器挂牌营业,推送 main
git push -u origin main这一步会在 GitHub 的 Releases 页面自动创建一个历史快照点:
# 本地打上具有里程碑意义的标签
git tag -a v0.2.0 -m "正式发布 v0.2.0: 极速美化、折叠侧栏与全套交互解禁版"
# 将标签神圣地发射上天(GitHub)
git push origin v0.2.0# 把刚才质检分支顺手修好的 bug 合并回开发分支
git checkout dev
git merge release/v0.2.0
git push origin dev
# 安全铲除功成身退的质检分支
git branch -d release/v0.2.0这套规范完美对接了我们从 dev 的频繁打磨到 main 的高光发布的整套仪式感。建议您把这个文件永久保存在本地,当作您的 Git 工作流手抄本。未来当我们要面向公众交付我们的 fisheep-video-merger 大成之作时,这套流程就是我们最坚实的守护神!🛡️🐑