セットアップ
初回使用時に setup.md を読んでください。デフォルトはベストプラクティスモード(設定不要)です。
使用するタイミング
ユーザーがGitのエキスパートを必要としている場合 — 基本操作から複雑なワークフローまで。エージェントがブランチ、マージ、リベース、コンフリクト解決、チームコラボレーションパターンを処理します。
アーキテクチャ
メモリは ~/git/ に保存されます。構造については memory-template.md を参照してください。
~/git/
└── memory.md # ユーザー設定(オプション)
クイックリファレンス
| トピック | ファイル |
|---|---|
| 必須コマンド | commands.md |
| 高度な操作 | advanced.md |
| ブランチ戦略 | branching.md |
| コンフリクト解決 | conflicts.md |
| 履歴と復旧 | history.md |
| チームワークフロー | collaboration.md |
| セットアップ | setup.md |
| メモリ | memory-template.md |
基本ルール
- 共有ブランチへのforce pushは絶対しない — 機能ブランチでのみ
--force-with-leaseを使用する - 早くコミット、頻繁にコミット — 小さなコミットはレビュー、revert、bisectが容易
- 意味のあるコミットメッセージを書く — 1行目は72文字以内、命令形で
- プッシュ前にプルする — マージコミットを避けるため、プッシュ前には必ず
git pull --rebaseを実行 - マージ前に整理する —
git rebase -iを使用してfixupコミットをスカッシュする
チームワークフロー
機能ブランチフロー:
- mainから
git checkout -b feature/name - コミットを作成し、定期的にプッシュ
- PRを開き、レビューを受ける
- スカッシュしてmainにマージ
- 機能ブランチを削除
ホットフィックスフロー:
- mainから
git checkout -b hotfix/issue - 修正、テスト、コミット
- main と develop(存在する場合)にマージ
- リリースにタグを付ける
デイリー同期:
git fetch --all --prune
git rebase origin/main # またはチームの好みに応じてマージ
コミットメッセージ
- 従来のコミット形式を使用:
type(scope): description - 1行目は72文字以内に保つ
- タイプ:
feat,fix,docs,style,refactor,test,chore
プッシュの安全性
--forceの代わりにgit push --force-with-leaseを使用 — 他人の作業の上書きを防止- プッシュが拒否された場合は、再試行する前に
git pull --rebaseを実行 - main/masterブランチにforce pushしない
コンフリクト解決
- コンフリクトファイルを編集した後、マーカーが残っていないか確認:
grep -r "<<<\|>>>\|===" . - マージ完了前にコードがビルドされることを確認
- マージが複雑になった場合は、
git merge --abortで中止し、代わりにgit rebaseを試す
ブランチ衛生管理
- マージ済みブランチをローカルで削除:
git branch -d branch-name - リモート追跡をクリーンアップ:
git fetch --prune - PR作成前に、機能ブランチを最新のmainにリベース
- プッシュ前に
git rebase -iを使用して乱雑なコミットをスカッシュ
安全チェックリスト
破壊的操作(reset --hard, rebase, force push)の前に:
- これは共有ブランチですか? → 履歴を書き換えない
- 未コミットの変更はありますか? → 最初にstashまたはコミット
- 正しいブランチにいますか? →
git branchで確認 - リモートは最新ですか? → 最初に
git fetch
よくある罠
- git user.emailが間違っている — 重要なコミットの前に
git config user.emailで確認 - 空のディレクトリ — Gitは追跡しないので、
.gitkeepを追加 - サブモジュール — 常に
--recurse-submodulesでクローン - デタッチドHEAD —
git switch -で前のブランチに戻る - プッシュが拒否された — 通常は先に
git pull --rebaseが必要 - stash popでコンフリクト — stashが消える。代わりに
stash applyを使用 - 大容量ファイル — 50MB以上のファイルにはGit LFSを使用し、シークレットは絶対にコミットしない
- 大文字小文字の区別 — Mac/Windowsは区別しないが、Linuxは区別する — CI障害の原因に
復旧コマンド
- 変更を残して最後のコミットを取り消す:
git reset --soft HEAD~1 - ステージされていない変更を破棄:
git restore filename - 失われたコミットを見つける:
git reflog(約90日間の履歴を保持) - 削除したブランチを復元:
git checkout -b branch-name <sha-from-reflog> - 複数の変更が混ざったコミットでは、部分ステージングに
git add -pを使用
バイセクトによるデバッグ
バグを導入したコミットを見つける:
git bisect start
git bisect bad # 現在のコミットが壊れている
git bisect good v1.0.0 # このバージョンは正常
# Gitが中間のコミットをチェックアウトするので、テストしてから:
git bisect good # または git bisect bad
# Gitが原因を見つけるまで繰り返す
git bisect reset # 元のブランチに戻る
クイックサマリー
git status -sb # ブランチ情報付きの短いステータス
git log --oneline -5 # 最後の5つのコミット
git shortlog -sn # コミット数順の貢献者一覧
git diff --stat HEAD~5 # 最後の5コミットの変更サマリー
git branch -vv # トラッキング情報付きブランチ一覧
git stash list # 保留中のstash一覧
関連スキル
ユーザーが確認した場合、clawhub install <slug> でインストール:
gitlab— GitLab CI/CD とマージリクエストdocker— コンテナ化ワークフローcode— コード品質とベストプラクティス
フィードバック
- 役に立った場合:
clawhub star git - 最新情報を取得:
clawhub sync