关于 git-best-practices
git-best-practices 是一项为 Agent 的 Git 操作提供流程与安全规范的技能,适用于分支、提交、推送和 PR 工作。它涵盖分支发现、显式暂存、规范提交,以及改写历史和强制推送的保护步骤。
主要功能
- 01操作前发现分支结构
- 02按 Conventional Commits 编写提交
- 03按文件名显式暂存
- 04强制推送前征求确认
- 05使用 --force-with-lease 保护历史
- 06提供分支、合并与 PR 流程
适用场景
- 01为功能或修复创建分支
- 02准备整洁且可审查的提交
- 03在改写历史后安全推送
- 04创建含摘要和测试计划的 PR
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ alleneubank/ claude-code --skill git-best-practices安装后在 Claude Code 中输入/git-best-practices确认已加载。
附带文件git-examples.md
详细介绍
Git 最佳实践
始终遵循的原则
加载此技能后,所有 Git 操作都必须遵循以下指令:
- 先发现,再行动 — 在创建分支、合并或开启 PR 之前,先运行分支发现命令,确定仓库的默认分支和生产分支
- 遵循 Conventional Commits — 每次提交都使用
type(scope): description格式 - 明确暂存 — 按名称添加文件,确保只提交预期的更改
- 保护共享历史记录 — 强制推送时使用
--force-with-lease;进行任何强制推送前都必须先征得用户确认
Agent Git 工作流
- 检查状态 — 运行
git status和git diff HEAD - 发现分支 — 确定默认分支、当前分支和(可选的)生产分支名称(参见“分支发现”)
- 按名称暂存 — 对每个文件运行
git add path/to/file;使用git status验证 - 编写 Conventional Commit — 使用
type(scope): description格式,可添加正文 - 安全推送 — 默认进行常规推送;仅在用户确认后,对重写过的历史记录运行
git push --force-with-lease origin {branch}
检查点提交
Agent 可以在耗时较长的任务期间创建 WIP 检查点提交,并在创建 PR 前清理。
- 使用
wip:前缀或标准的 Conventional Commit 格式 - 即使处于 WIP 状态,也要按逻辑分组更改
- 开启 PR 前运行
/rewrite-history,整理出清晰的提交记录
提交规范
- 按名称明确暂存文件:
git add src/auth.ts src/auth.test.ts - 提交前使用
git status验证已暂存的内容 - 不要将密钥、
.env文件、凭据和大型二进制文件纳入提交;如果暂存文件看起来包含敏感内容,请提醒用户 - 最终 PR 就绪状态下,每次提交只包含一项逻辑更改
强制推送
只能使用 --force-with-lease,以避免覆盖上游更改:
git push --force-with-lease origin feat/my-branch
无论针对哪个分支,任何强制推送前都必须先征得用户确认。
重设一组分支的基点
重设其他分支以某个分支为基础构建的分支基点时(例如分阶段的 NN-description 分支链),请使用 git rebase --update-refs,让后续分支跟随重写后的提交,而不是成为旧提交上的孤立分支。--update-refs 只会移动本地引用;移动过的分支如果也存在于远程,仍需在获得用户确认后分别使用 --force-with-lease 推送;而在其他工作树中已检出的分支则会跳过。有关完整的冲突解决和安全工作流,请使用 git-rebase-sync 技能。
Conventional Commits
格式:type(scope): description
主题行规则:
- 使用小写和祈使语气,末尾不加句点
- 少于 72 个字符
- 范围可选;存在明确的子系统时,建议填写
常见类型:
| 类型 | 用途 |
|---|---|
feat | 新增功能 |
fix | 修复错误 |
docs | 仅修改文档 |
refactor | 重构,不改变行为 |
perf | 提升性能 |
chore | 维护、依赖项、工具 |
test | 添加或更新测试 |
ci | CI/CD 流水线更改 |
build | 构建系统更改 |
style | 格式、空白字符(不改变逻辑) |
提交正文
正文为可选内容,仅在更改原因确实不明显时添加。主题行说明“做了什么”,正文解释“为什么”。
以下情况应添加正文:
- 动机或权衡不明显
- 多部分更改适合用项目符号列表说明
- 需要外部上下文(链接、问题引用、根本原因)
有关提交消息示例,请参阅 git-examples.md。
分支发现
创建分支或开启 PR 之前,请先发现仓库的分支拓扑。运行以下命令并保存结果:
# Default branch (PR target for most repos)
gh repo view --json defaultBranchRef --jq '.defaultBranchRef.name'
# Current branch
git branch --show-current
# Production branch (if different from default)
git branch -r --list 'origin/main' 'origin/master' 'origin/production'
如果 gh 不可用或仓库没有远程,请参阅 git-examples.md 中的备用命令。
保存发现的分支名称,并在后续操作中引用。后续命令都要使用实际分支名称。
分支命名
优先遵循仓库的分支命名约定。如果未记录任何约定,请使用:
格式:type/description-TICKET-ID
示例:
feat/add-login-SEND-77fix/pool-party-stall-SEN-68chore/update-depshotfix/auth-bypass
存在问题单时,请包含问题单 ID。没有问题单时,请省略。
分支流程
优先遵循仓库的分支流程策略。如果未记录相关策略,常见的基准做法是:
{production-branch} (production deploys)
└── {default-branch} (staging/testnet deploys, PR target)
├── feat/add-feature-TICKET
├── fix/bug-description-TICKET
└── hotfix/* (branches off production branch for hotfixes)
- 功能和修复分支从默认分支创建
- 热修复分支从生产分支创建
- 除非仓库采用单分支流程,否则 PR 以默认分支为目标
- 默认分支和生产分支相同时,所有 PR 都直接以该分支为目标
合并策略
优先遵循仓库的合并策略(许多组织要求遵守)。
如果没有相关策略,以下默认做法较为合理:
| PR 目标 | 策略 | 理由 |
|---|---|---|
| 功能分支 → 默认分支 | Squash 合并 | 保持历史记录整洁,每项功能对应一个提交 |
| 默认分支 → 生产分支 | 合并提交 | 保留发布边界;部署节点清晰可见 |
| 热修复分支 → 生产分支 | Squash 合并 | 在生产环境中进行单次原子修复 |
PR 工作流
规模
优先采用务实的规模划分,而非武断的限制。无论 PR 大小如何,每个提交都应表达清晰的内容。PR 应当作为一个完整单元便于审查——如果审查者无法在脑中把握完整的变更,请考虑拆分。
创建 PR
使用仓库原生的 PR 工具(gh pr create、GitLab CLI 或 Web UI),并包含:
- 70 个字符以内的简短标题
- 包含 1-3 个项目符号的摘要部分
- 以项目符号清单形式列出的测试计划
创建 PR 前重写历史记录
对于包含杂乱 WIP 历史记录的分支,使用 /rewrite-history 来:
- 备份分支
- 重置到基分支的最新提交
- 将变更重新提交为清晰连贯的序列
- 验证与备份逐字节一致
- 在强制推送重写后的历史记录前征得用户确认
- 打开 PR,并附上备份分支的链接
每个重写后的提交都引入一个连贯的想法,并以前一个提交为基础逐步构建——就像教程一样,带领读者了解功能的构建过程。