跳到主要内容

Git 工作流

Git 记录的是可审计的变更历史,而不只是备份。本篇固定分支命名、提交信息、PR 与发布标签的默认约定,便于个人项目与协作仓库共用同一套肌肉记忆。

分支模型(默认)

分支用途合并目标
main可随时部署/发布的稳定线
feature/*单一需求或修复main(经 PR)
fix/*生产热修(可选)main + 必要时 cherry-pick
release/*版本冻结、仅修 blocker(可选)main + tag

个人仓库简化:直接在 main 上小步提交也可;功能变大时再切 feature/

提示

短分支:存活 < 3 天优先,减少长期 merge 冲突。每日 git fetch + 基于最新 main rebase 或 merge(团队选一种并统一)。

提交信息

采用 Conventional Commits 子集,便于 changelog 与语义化版本:

<type>(<scope>): <subject>

<body 可选>
type含义
feat新能力
fix缺陷修复
docs仅文档
refactor行为不变的重构
test测试
chore构建、依赖、杂项

subject:祈使句、≤72 字符、无句号;说明「做了什么」而非「做了什么+为什么长篇」。

Pull Request 清单

  • 范围单一:一个 PR 解决一个问题
  • CI 绿:lint、测试、契约(如有)
  • 描述含:动机、方案摘要、如何验证、关联 issue
  • 破坏性变更在标题或标签标明 BREAKING
  • 大 diff 附架构/数据迁移说明

评审时优先看:边界是否被跨过、测试是否覆盖行为变化、回滚是否简单(见 边界)。

合并策略

策略优点注意
Squash mergemain 历史干净丢失细粒度提交;PR 标题要写好
Rebase merge线性历史禁止改写已推送的公共分支
Merge commit保留分支拓扑历史噪声多

默认推荐:面向产品的 main 用 squash;开源库若需保留贡献者 commit 用 merge。

标签与发布

标签语义
vMAJOR.MINOR.PATCH语义化版本
v1.2.3-rc.1预发布

发布步骤简表:

  1. main 打 tag 并推送
  2. CI 构建产物 / 镜像 / App Store 构建号
  3. 附 release notes(可从 conventional commits 生成)

安全与卫生

  • 不提交密钥、.env 本地覆盖;用 .env.example 文档化变量
  • 敏感文件进 .gitignore;误提交立即轮换密钥 + git filter-repo(慎用 force push)
  • 签名提交(可选):GPG/SSH sign 提高供应链可信度

相关篇章