git-expert について
git-expertは、開発者やDevOps担当者向けにGitのコマンドや、ブランチ・履歴・大規模リポジトリの運用方法を案内するスキルです。変更の確認と危険な操作の回避を重視します。
主な機能
- 01簡潔なGitコマンド案内
- 02ブランチ・マージ・履歴の運用
- 03安全な取り消しと競合解決
- 04大規模リポジトリの性能対策
- 05コミット署名とセキュリティの実践
活用シーン
- 01コミット前のステージ済み変更の確認
- 02安全なコミット取り消し方法の選択
- 03マージ競合の解決
- 04大規模モノレポの運用
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ oimiragieo/ agent-studio --skill git-expertインストール後、Claude Code で/git-expertを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
commands/git-expert.mdhooks/post-execute.cjspre-execute.cjsreferences/research-requirements.mdrules/git-expert.mdschemas/input.schema.jsonoutput.schema.jsonscripts/main.cjstemplates/implementation-template.md詳細
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 <branch>またはgit checkout -b <branch>— 新しいブランチを作成、git branch— ブランチを一覧表示git log --oneline -5— 簡潔な履歴、git log --follow <file>— ファイル名の変更を追跡git restore <file>— ステージングされていない変更を破棄、git reset --soft HEAD~1— 直前のコミットを取り消す(変更は保持)git fetchの後にgit mergeまたはgit pull— 無条件に pull するよりも、fetch+merge を優先
ヒント: git config --global color.ui auto と user.name/user.email を設定します。.gitignore を積極的に活用してください。機能ブランチのマージでは、履歴をすっきり保つため git merge --squash を優先します。単一のコミットを取り込むには git cherry-pick <commit> を使用します。チームの合意なしに、プッシュ済みのコミットをリベースしてはいけません。
認定資格とトレーニング
無料/公式: Atlassian Git Tutorials(初級〜上級)。Microsoft Learn – GitHub Training(GitHub Foundations の学習パス)。GitHub Learn(Git + GitHub)。「Git 認定資格」として単一のものはありません。GitHub Foundations は基本事項に沿った内容です。
スキルのデータ: ブランチ操作、取り消し(reset/restore/revert)、merge と rebase の違い、リモートワークフロー、安全性(強制プッシュをしない、シークレットを含めない)に重点を置きます。
フックとワークフロー
推奨フック: Pre-commit:commit-validator を実行します(Conventional Commits)。Pre-push:テストを実行します(tdd/verification-before-completion を参照)。Post-merge:必要に応じて記憶/学習内容を更新します。
ワークフロー: developer(主に使用)、devops(常に使用)と組み合わせます。流れ:ブランチ作成 → 編集 → add → コミットメッセージの検証 → コミット → プッシュ。PR の作成には github-ops または github-mcp を使用します。git-expert を使用する feature-development と code-review のワークフローについては .claude/workflows を参照してください。
⚡ トークン効率のよいワークフロー
git status を繰り返し実行しないでください。次のワークフローを使用します。
- 状態を確認:
git status -s(短い形式でトークンを節約します) - 差分を確認:
git diff --cached(コミットしようとしている内容だけを確認します) - ログを確認:
git log --oneline -5(余分な情報を省いたコンテキストを確認します)
🔄 よく使うパターン
安全なコミット
git add <file>
git diff --cached # REVIEW THIS!
git commit -m "feat: description"
直前のコミットを取り消す(ソフト)
git reset --soft HEAD~1
マージコンフリクトを解決
git statusでコンフリクトのあるファイルを確認します。- ファイルを編集し、マーカー(
<<<<、====、>>>>)を解決します。 git add <file>git commit --no-edit
厳守すべき原則
- 共有ブランチで
git push --forceを絶対に使用しないでください。強制プッシュはすべての共同作業者の履歴を書き換え、コミットの喪失を招き、進行中のリベースを気づかれないまま破損させます。本当に必要な場合は--force-with-leaseを使用してください。 - シークレット、認証情報、トークンをリポジトリに絶対にコミットしないでください。一度プッシュすると、HEAD から削除した後も、すべてのフォークとクローンでシークレットが永久に閲覧可能になります。
- 共有ブランチにプッシュする前に、必ずテストスイートを実行し、合格することを確認してください。共有ブランチのコードが壊れていると全員の作業が止まり、緊急のロールバックが必要になります。
- マージ前に、機能ブランチをベースブランチに必ずリベースしてください。古いベースとのマージは、回避可能なコンフリクトを生み、共有履歴に不要なマージコミットを作成します。
- 共有リモートにすでにプッシュ済みのコミットを、リベースしたり履歴を書き換えたり絶対にしないでください。チームメイトのローカルブランチが分岐し、次回の pull で重複したコミットが生じます。
アンチパターン
| アンチパターン | 失敗する理由 | 正しいアプローチ |
|---|---|---|
共有ブランチでの git push --force | チームメイトのコミットを上書きし、進行中のリベースブランチを破壊します | 個人ブランチでのみ --force-with-lease を使用し、main/develop では使用しません |
.env や認証情報のコミット | 削除後も履歴に永久に残り、キーのローテーションが必要になります | 機密ファイルを .gitignore に追加し、コミット前のシークレットスキャンフックを使用します |
| 長期間存続するフィーチャーブランチ(5日超) | 大規模なマージコンフリクトが発生し、統合時のバグ発見が遅れます | main に毎日リベースする、短期間存続するブランチを使用します(トランクベース開発) |
git commit -m "fix" や wip のようなメッセージ | git log が二分探索や変更履歴の生成に役立たなくなります | 規約に沿ったコミットを使用します:fix: resolve null pointer in user auth |
| 最新のベースを取り込まずにマージ | マージベースが古く、マージが反映された後にのみ CI がコンフリクトを検出します | マージや PR の前に git fetch && git rebase origin/main を実行します |
Git 2.45–2.50 の機能(2024–2025)
Reftable バックエンド(Git 2.45+)
reftable バックエンドは、従来の files 参照形式を、より高速でアトミックかつストレージ効率に優れたバイナリ形式に完全に置き換えます。
メリット:
- 複数の参照をアトミックに更新します(すべて成功するか、すべて失敗するかのトランザクション)
- 単一の参照の検索と、参照範囲の反復処理が高速になります
- 一貫した読み取りを実現し、不完全な更新状態を読み取ることはありません
- reflog のストレージ効率が向上します
新しいリポジトリで有効にする方法:
git init --ref-format=reftable my-repo
現在のバックエンドを確認する方法:
git rev-parse --show-ref-format
# outputs: files OR reftable
移行に関する注意: 既存のリポジトリを files から reftable に変換するには、再クローンするか、git clone --ref-format=reftable を使用する必要があります。files を使用するリポジトリのクライアントには影響しません。バックエンドはサーバー側またはローカル側のみです。
インクリメンタルなマルチパックインデックス(Git 2.47+)
マルチパックインデックス(MIDX)を使うと、再パックせずに、複数のパックファイルにまたがる単一のインデックスを Git で管理できます。Git 2.47 では、インクリメンタルな MIDX 更新が追加されました。MIDX 全体を再構築するのではなく、新たに追加されたパックのみをインデックス化します。
# Generate or update multi-pack index
git multi-pack-index write --stdin-packs
# Verify the MIDX
git multi-pack-index verify
# Enable via maintenance
git maintenance start
マルチパック到達可能性ビットマップは、事前計算された到達可能性データで MIDX を拡張し、大規模なリポジトリでの git clone、git fetch、ガベージコレクションを大幅に高速化します。
モノレポ向けのスパースチェックアウト(Git 2.25+ のコーンモード)
スパースチェックアウトを使うと、大規模なモノレポから必要なディレクトリのみをチェックアウトできます。
# Clone without checking out any files
git clone --no-checkout --filter=blob:none https://github.com/org/monorepo.git
cd monorepo
# Initialize in cone mode (recommended — uses fast prefix matching)
git sparse-checkout init --cone
# Check out only specific directories
git sparse-checkout set frontend docs shared/utils
# See what is currently checked out
git sparse-checkout list
# Add more directories without losing current ones
git sparse-checkout add backend/api
# Disable sparse checkout (restore full working tree)
git sparse-checkout disable
1 コマンドでのクローン(Git 2.25+):
git clone --filter=blob:none --sparse https://github.com/org/monorepo.git
cd monorepo
git sparse-checkout set services/payments
コーンモードと非コーンモードの比較:
| モード | パターンマッチング | パフォーマンス |
|---|---|---|
| コーン(推奨) | ディレクトリのプレフィックスのみ | 高速(パスのマッチングは O(log n)) |
| 非コーン | gitignore 形式のパターン全般 | 大規模なツリーでは低速 |
Git Scalar — 大規模リポジトリの最適化
Scalar は Git に同梱されている(Git 2.38 以降)リポジトリ管理ツールです。推奨されるすべてのパフォーマンス設定を自動的に構成し、維持します。
# Clone a large repo with all performance features enabled
scalar clone https://github.com/org/large-monorepo.git
# Register an existing repo with Scalar
scalar register
# Run all maintenance tasks manually
scalar run all
# View configured enlistments
scalar list
Scalar が自動的に構成する内容:
- 部分クローン(
--filter=blob:none) - スパースチェックアウト(コーンモード)
- ファイルシステムモニター(
core.fsmonitor) - コミットグラフの生成
- バックグラウンドメンテナンス(1 時間ごとの fetch、毎日の gc)
- マルチパックインデックス
SSH キーでコミットに署名する(Git 2.34+)
SSH キーによる署名は GPG より簡単で、認証にすでに使用しているキーを使えます。
# Configure SSH signing globally
git config --global gpg.format ssh
git config --global user.signingKey ~/.ssh/id_ed25519.pub
# Sign all commits automatically
git config --global commit.gpgSign true
# Or sign a single commit manually
git commit -S -m "feat: add payment service"
# Verify a commit
git verify-commit HEAD
チームでの検証用に許可された署名者のファイルを設定します:
# ~/.config/git/allowed_signers
[email protected] ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA...
[email protected] 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/ハードウェアセキュリティキーによる署名:
# Generate a resident key on a FIDO2 security key (e.g., 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 is the default; explicitly select if needed
git merge -s ort feature/my-feature
# Rename detection threshold (default 50%)
git merge -X rename-threshold=80 feature/rename-heavy-branch
# Conflict style: diff3 (shows common ancestor) — strongly recommended
git config --global merge.conflictStyle diff3
# Or zdiff3 (even cleaner context in conflicts, Git 2.35+)
git config --global merge.conflictStyle zdiff3
大規模リポジトリ向けのパフォーマンスコマンド
# Enable file system monitor (avoids scanning entire tree for status)
git config core.fsmonitor true
git config core.untrackedCache true
# Precompute commit graph for faster log/blame
git commit-graph write --reachable --changed-paths
git config fetch.writeCommitGraph true
# Partial clone — skip large blobs on clone, fetch on demand
git clone --filter=blob:none <url>
# Shallow clone (CI use case — last N commits only)
git clone --depth=1 <url>
# Check repository health and performance
GIT_TRACE_PERFORMANCE=1 git status
関連スキル
gitflow- ブランチのワークフローパターン(feature、release、hotfix ブランチ)
メモリプロトコル(必須)
開始前:
.claude/context/memory/learnings.md を読みます
完了後:
- 新しいパターン ->
.claude/context/memory/learnings.md - 問題を発見 ->
.claude/context/memory/issues.md - 決定事項 ->
.claude/context/memory/decisions.md
中断を前提にしてください:メモリに記録されていなければ、実行されていないものとします。