Git专家技能Skill git-expert

这是一个Git高级操作封装技能,旨在优化令牌使用,通过指导复杂Git工作流程为高效命令行命令。包括Git安装指南、最佳实践、安全规则、最新Git特性(如Reftable后端、SSH密钥签名等),适用于开发人员和DevOps团队,提升版本控制效率和安全性。关键词:Git,高级操作,工作流程优化,命令行,安全,DevOps,版本控制。

DevOps 0 次安装 0 次浏览 更新于 3/10/2026

名称: 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 mergegit pull — 优先fetch+merge而非盲目pull

技巧: 设置 git config --global color.ui autouser.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-opsgithub-mcp进行PR/创建。见 .claude/workflows 用于特性开发和代码审查工作流程,这些使用git-expert。

⚡ 令牌高效工作流程

不要重复使用 git status。使用此工作流程:

  1. 检查状态: git status -s(简短格式节省令牌)
  2. 差异: git diff --cached(仅检查即将提交的内容)
  3. 日志: git log --oneline -5(上下文无噪音)

🔄 常见模式

安全提交

git add <文件>
git diff --cached # 审查此内容!
git commit -m "feat: 描述"

撤销上次提交(软)

git reset --soft HEAD~1

修复合并冲突

  1. git status 查看冲突文件。
  2. 编辑文件以解析标记(<<<<, ====, >>>>)。
  3. git add <文件>
  4. 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 clonegit 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

假设中断:如果不在内存中,则未发生。