名称: git-expert 描述: 高级Git操作封装器。通过将复杂Git工作流程指导为高效CLI命令来优化令牌使用。 版本: 1.1.0 模型: sonnet 调用者: 两者 用户可调用: true 工具: [Bash, Read] 最佳实践:
- 从不使用 git push --force
- 从不提交秘密
- 推送前始终运行测试
- 使用SSH密钥签名代替GPG进行提交验证
- 使用稀疏检出锥模式用于单仓库工作流程
- 使用Git Scalar进行大型仓库性能优化
- 新仓库优先使用reftable后端(Git 2.45+) 错误处理: 优雅 流式支持: 支持 已验证: true 最后验证时间: 2026-02-19T06:00:00.000Z
Git专家技能
安装
该技能调用 git CLI。如果未安装Git,请安装:
- Windows: 从 git-scm.com 下载或运行
winget install --id Git.Git -e --source winget - macOS:
brew install git或 Xcode CLI工具:xcode-select --install - Linux:
apt-get install git(Debian/Ubuntu),dnf install git(Fedora),pacman -S git(Arch)
验证: git --version
速查表与最佳实践
基本命令(令牌高效):
git status -s— 简短状态;git add -p— 阶段块;git diff --cached— 审查已阶段git switch -c <分支>或git checkout -b <分支>— 新分支;git branch— 列表git log --oneline -5— 紧凑历史;git log --follow <文件>— 跟踪重命名git restore <文件>— 丢弃未阶段;git reset --soft HEAD~1— 撤销上次提交(保留更改)git fetch然后git merge或git pull— 优先fetch+merge而非盲目pull
技巧: 设置 git config --global color.ui auto 和 user.name/user.email。积极使用 .gitignore。在特性合并时优先 git merge --squash 以获得干净历史。使用 git cherry-pick <提交> 引入单个提交。未经团队同意,切勿变基已推送的提交。
认证与培训
免费/官方: Atlassian Git教程(初级–高级)。Microsoft Learn – GitHub培训(GitHub基础路径)。GitHub Learn(Git + GitHub)。无单一“Git认证”;GitHub基础与基础对齐。
技能数据: 专注于分支、撤销(reset/restore/revert)、合并vs变基、远程工作流程和安全(无强制推送、无秘密)。
钩子与工作流程
建议钩子: 提交前:运行 commit-validator(常规提交)。推送前:运行测试(参考 tdd / verification-before-completion)。合并后:可选内存/学习更新。
工作流程: 与开发者(主要)、DevOps(始终)一起使用。流程:分支 → 编辑 → 添加 → 验证提交消息 → 提交 → 推送;使用github-ops或github-mcp进行PR/创建。见 .claude/workflows 用于特性开发和代码审查工作流程,这些使用git-expert。
⚡ 令牌高效工作流程
不要重复使用 git status。使用此工作流程:
- 检查状态:
git status -s(简短格式节省令牌) - 差异:
git diff --cached(仅检查即将提交的内容) - 日志:
git log --oneline -5(上下文无噪音)
🔄 常见模式
安全提交
git add <文件>
git diff --cached # 审查此内容!
git commit -m "feat: 描述"
撤销上次提交(软)
git reset --soft HEAD~1
修复合并冲突
git status查看冲突文件。- 编辑文件以解析标记(
<<<<,====,>>>>)。 git add <文件>git commit --no-edit
🛡️ 安全规则
- 从不使用
git push --force。 - 从不提交秘密。
- 推送前始终运行测试。
Git 2.45–2.50 特性(2024–2025)
Reftable后端(Git 2.45+)
Reftable后端完全替换了传统的 files 引用格式,采用二进制格式,更快、原子化且存储高效:
好处:
- 原子多引用更新(全或无事务)
- 更快单引用查找和迭代引用范围
- 一致性读取 — 从不读取部分更新状态
- 更高效的reflog存储
为新仓库启用:
git init --ref-format=reftable 我的仓库
检查当前后端:
git rev-parse --show-ref-format
# 输出: files 或 reftable
迁移注意: 将现有仓库从 files 转换为 reftable 需要重新克隆或使用 git clone --ref-format=reftable。使用 files 仓库的客户端不受影响 — 后端仅服务器/本地。
增量多包索引(Git 2.47+)
多包索引(MIDX)允许Git在不重新打包的情况下维护跨多个包文件的单一索引。Git 2.47添加了增量MIDX更新 — 仅新添加的包被索引而非重建完整MIDX:
# 生成或更新多包索引
git multi-pack-index write --stdin-packs
# 验证MIDX
git multi-pack-index verify
# 通过维护启用
git maintenance start
多包可达性位图扩展MIDX,包含预计算的可达性数据,显著加快大型仓库上的 git clone、git fetch 和垃圾收集。
单仓库稀疏检出(Git 2.25+ 锥模式)
稀疏检出让你仅检出大型单仓库中需要的目录:
# 克隆但不检出任何文件
git clone --no-checkout --filter=blob:none https://github.com/org/monorepo.git
cd monorepo
# 以锥模式初始化(推荐 — 使用快速前缀匹配)
git sparse-checkout init --cone
# 仅检出特定目录
git sparse-checkout set frontend docs shared/utils
# 查看当前检出内容
git sparse-checkout list
# 添加更多目录而不丢失当前
git sparse-checkout add backend/api
# 禁用稀疏检出(恢复完整工作树)
git sparse-checkout disable
单命令克隆(Git 2.25+):
git clone --filter=blob:none --sparse https://github.com/org/monorepo.git
cd monorepo
git sparse-checkout set services/payments
锥模式 vs. 非锥模式:
| 模式 | 模式匹配 | 性能 |
|---|---|---|
| 锥(推荐) | 仅目录前缀 | 快速(O(log n)路径匹配) |
| 非锥 | 完整gitignore样式模式 | 大型树上慢 |
Git Scalar — 大型仓库优化
Scalar是与Git捆绑的仓库管理工具(自Git 2.38起),自动配置和维护所有推荐的性能设置:
# 克隆大型仓库,启用所有性能特性
scalar clone https://github.com/org/large-monorepo.git
# 注册现有仓库到Scalar
scalar register
# 手动运行所有维护任务
scalar run all
# 查看已配置的注册
scalar list
Scalar自动配置的内容:
- 部分克隆(
--filter=blob:none) - 稀疏检出(锥模式)
- 文件系统监视器(
core.fsmonitor) - 提交图生成
- 后台维护(每小时fetch,每日gc)
- 多包索引
使用SSH密钥签名提交(Git 2.34+)
SSH密钥签名比GPG更简单,并使用您已用于身份验证的密钥:
# 全局配置SSH签名
git config --global gpg.format ssh
git config --global user.signingKey ~/.ssh/id_ed25519.pub
# 自动签名所有提交
git config --global commit.gpgSign true
# 或手动签名单个提交
git commit -S -m "feat: 添加支付服务"
# 验证提交
git verify-commit HEAD
为团队验证设置允许签名者文件:
# ~/.config/git/allowed_signers
alice@example.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA...
bob@example.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA...
git config --global gpg.ssh.allowedSignersFile ~/.config/git/allowed_signers
git log --show-signature
GitHub验证: 在GitHub的Settings > SSH and GPG keys > New SSH key > Signing Key下添加您的SSH签名密钥。使用该密钥签名的提交将在GitHub上显示“已验证”。
FIDO2 / 硬件安全密钥签名:
# 在FIDO2安全密钥上生成驻留密钥(如YubiKey)
ssh-keygen -t ed25519-sk -O resident -f ~/.ssh/id_ed25519_sk_fido2
git config --global user.signingKey ~/.ssh/id_ed25519_sk_fido2.pub
改进的合并策略(Git 2.38+ ort)
ort合并策略自Git 2.34起成为默认。对于大型树,它比recursive显著更快且更确定性:
# ort是默认;如需明确选择
git merge -s ort feature/my-feature
# 重命名检测阈值(默认50%)
git merge -X rename-threshold=80 feature/rename-heavy-branch
# 冲突样式: diff3(显示共同祖先)— 强烈推荐
git config --global merge.conflictStyle diff3
# 或zdiff3(冲突中上下文更清晰,Git 2.35+)
git config --global merge.conflictStyle zdiff3
大型仓库性能命令
# 启用文件系统监视器(避免为状态扫描整个树)
git config core.fsmonitor true
git config core.untrackedCache true
# 预计算提交图以加快日志/责备
git commit-graph write --reachable --changed-paths
git config fetch.writeCommitGraph true
# 部分克隆 — 克隆时跳过大型blob,按需获取
git clone --filter=blob:none <url>
# 浅克隆(CI用例 — 仅最后N次提交)
git clone --depth=1 <url>
# 检查仓库健康和性能
GIT_TRACE_PERFORMANCE=1 git status
相关技能
gitflow- 分支工作流程模式(特性、发布、热修复分支)
内存协议(强制性)
开始前:
阅读 .claude/context/memory/learnings.md
完成后:
- 新模式 ->
.claude/context/memory/learnings.md - 发现问题 ->
.claude/context/memory/issues.md - 决策记录 ->
.claude/context/memory/decisions.md
假设中断:如果不在内存中,则未发生。