mcpField
G
git

git

github.com/julianobarbosa開発1562 回インストール1 週間前に更新
リポジトリ

git について

gitは、履歴管理やブランチ作業、復旧に取り組むGitユーザー向けの高度なワークフロースキルです。interactive rebase、cherry-pick、bisect、worktree、reflogの実践手順を扱います。

主な機能

  1. 01interactive rebaseによるコミット整理
  2. 02選択したコミットの別ブランチへの適用
  3. 03bisectによる不具合導入コミットの特定
  4. 04worktreeによる複数ブランチの並行作業
  5. 05reflogを使った失われたコミットの復旧

活用シーン

  1. 01マージ前のフィーチャーブランチ整理
  2. 02複数のリリースブランチへの修正適用
  3. 03不具合を導入したコミットの特定
  4. 04誤ったリセットや削除後のコミット復旧

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/julianobarbosa/claude-code-skills --skill git

インストール後、Claude Code で/gitを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
ConventionalCommits.md
GitBestPractices.md
GitWorktree.md
SecurityChecklist.md
workflows/
Branch.md
Commit.md
CommitPush.md
Diff.md
Log.md
Merge.md
PullRequest.md
Rebase.md
Stash.md
Status.md
Sync.md
Undo.md
Worktree.md

詳細

Git の高度なワークフロー

高度な Git テクニックを習得して、履歴をきれいに保ち、効果的に共同作業し、どのような状況からも自信を持って復旧できるようにします。

このスキルを使う場面

  • マージ前にコミット履歴を整理する
  • 特定のコミットを別のブランチに適用する
  • バグを導入したコミットを特定する
  • 複数の機能を同時に開発する
  • Git の操作ミスや失われたコミットから復旧する
  • 複雑なブランチのワークフローを管理する
  • レビューに向けて整理された PR を準備する
  • 分岐したブランチを同期する

主な概念

1. インタラクティブリベース

インタラクティブリベースは、Git の履歴を編集するための万能ツールです。

一般的な操作:

  • pick:コミットをそのまま保持する
  • reword:コミットメッセージを変更する
  • edit:コミットの内容を修正する
  • squash:直前のコミットとまとめる
  • fixup:メッセージを破棄して squash と同様にまとめる
  • drop:コミットを完全に削除する

基本的な使い方:

# Rebase last 5 commits
git rebase -i HEAD~5

# Rebase all commits on current branch
git rebase -i $(git merge-base HEAD main)

# Rebase onto specific commit
git rebase -i abc123
2. チェリーピック

ブランチ全体をマージせずに、あるブランチから別のブランチへ特定のコミットを適用します。

# Cherry-pick single commit
git cherry-pick abc123

# Cherry-pick range of commits (exclusive start)
git cherry-pick abc123..def456

# Cherry-pick without committing (stage changes only)
git cherry-pick -n abc123

# Cherry-pick and edit commit message
git cherry-pick -e abc123
3. Git Bisect

コミット履歴を二分探索して、バグを導入したコミットを特定します。

# Start bisect
git bisect start

# Mark current commit as bad
git bisect bad

# Mark known good commit
git bisect good v1.0.0

# Git will checkout middle commit - test it
# Then mark as good or bad
git bisect good  # or: git bisect bad

# Continue until bug found
# When done
git bisect reset

自動 Bisect:

# Use script to test automatically
git bisect start HEAD v1.0.0
git bisect run ./test.sh

# test.sh should exit 0 for good, 1-127 (except 125) for bad
4. Worktree

スタッシュやブランチの切り替えをせずに、複数のブランチで同時に作業できます。

# List existing worktrees
git worktree list

# Add new worktree for feature branch
git worktree add ../project-feature feature/new-feature

# Add worktree and create new branch
git worktree add -b bugfix/urgent ../project-hotfix main

# Remove worktree
git worktree remove ../project-feature

# Prune stale worktrees
git worktree prune
5. Reflog

安全網として、削除されたコミットも含め、すべての参照の移動を記録します。

# View reflog
git reflog

# View reflog for specific branch
git reflog show feature/branch

# Restore deleted commit
git reflog
# Find commit hash
git checkout abc123
git branch recovered-branch

# Restore deleted branch
git reflog
git branch deleted-branch abc123

実践的なワークフロー

ワークフロー 1:PR の前にフィーチャーブランチを整理する
# Start with feature branch
git checkout feature/user-auth

# Interactive rebase to clean history
git rebase -i main

# Example rebase operations:
# - Squash "fix typo" commits
# - Reword commit messages for clarity
# - Reorder commits logically
# - Drop unnecessary commits

# Force push cleaned branch (safe if no one else is using it)
git push --force-with-lease origin feature/user-auth
ワークフロー 2:複数のリリースにホットフィックスを適用する
# Create fix on main
git checkout main
git commit -m "fix: critical security patch"

# Apply to release branches
git checkout release/2.0
git cherry-pick abc123

git checkout release/1.9
git cherry-pick abc123

# Handle conflicts if they arise
git cherry-pick --continue
# or
git cherry-pick --abort
ワークフロー 3:バグの導入箇所を特定する
# Start bisect
git bisect start
git bisect bad HEAD
git bisect good v2.1.0

# Git checks out middle commit - run tests
npm test

# If tests fail
git bisect bad

# If tests pass
git bisect good

# Git will automatically checkout next commit to test
# Repeat until bug found

# Automated version
git bisect start HEAD v2.1.0
git bisect run npm test
ワークフロー 4:複数ブランチで開発する
# Main project directory
cd ~/projects/myapp

# Create worktree for urgent bugfix
git worktree add ../myapp-hotfix hotfix/critical-bug

# Work on hotfix in separate directory
cd ../myapp-hotfix
# Make changes, commit
git commit -m "fix: resolve critical bug"
git push origin hotfix/critical-bug

# Return to main work without interruption
cd ~/projects/myapp
git fetch origin
git cherry-pick hotfix/critical-bug

# Clean up when done
git worktree remove ../myapp-hotfix
ワークフロー 5:操作ミスから復旧する
# Accidentally reset to wrong commit
git reset --hard HEAD~5  # Oh no!

# Use reflog to find lost commits
git reflog
# Output shows:
# abc123 HEAD@{0}: reset: moving to HEAD~5
# def456 HEAD@{1}: commit: my important changes

# Recover lost commits
git reset --hard def456

# Or create branch from lost commit
git branch recovery def456

高度なテクニック

リベースとマージの使い分け

リベースを使う場面:

  • プッシュ前にローカルのコミットを整理する
  • フィーチャーブランチを main の最新状態に保つ
  • レビューしやすい直線的な履歴を作成する

マージを使う場面:

  • 完了した機能を main に統合する
  • 共同作業の正確な履歴を維持する
  • 他の人が利用している公開ブランチを扱う
# Update feature branch with main changes (rebase)
git checkout feature/my-feature
git fetch origin
git rebase origin/main

# Handle conflicts
git status
# Fix conflicts in files
git add .
git rebase --continue

# Or merge instead
git merge origin/main
Autosquash ワークフロー

リベース中に fixup コミットを自動的にまとめます。

# Make initial commit
git commit -m "feat: add user authentication"

# Later, fix something in that commit
# Stage changes
git commit --fixup HEAD  # or specify commit hash

# Make more changes
git commit --fixup abc123

# Rebase with autosquash
git rebase -i --autosquash main

# Git automatically marks fixup commits
コミットの分割

1 つのコミットを複数の論理的なコミットに分割します。

# Start interactive rebase
git rebase -i HEAD~3

# Mark commit to split with 'edit'
# Git will stop at that commit

# Reset commit but keep changes
git reset HEAD^

# Stage and commit in logical chunks
git add file1.py
git commit -m "feat: add validation"

git add file2.py
git commit -m "feat: add error handling"

# Continue rebase
git rebase --continue
部分的なチェリーピック

コミットから特定のファイルのみをチェリーピックします。

# Show files in commit
git show --name-only abc123

# Checkout specific files from commit
git checkout abc123 -- path/to/file1.py path/to/file2.py

# Stage and commit
git commit -m "cherry-pick: apply specific changes from abc123"

ベストプラクティス

  1. 必ず --force-with-lease を使う:--force より安全で、他の人の作業を上書きしません
  2. ローカルのコミットのみをリベースする:プッシュして共有済みのコミットはリベースしないでください
  3. わかりやすいコミットメッセージを書く:将来の自分が、今の自分に感謝するでしょう
  4. アトミックなコミットにする:各コミットは、1 つの論理的な変更にまとめます
  5. 強制プッシュの前にテストする:履歴の書き換えによって問題が起きていないことを確認します
  6. Reflog を意識する:Reflog は 90 日間利用できる安全網です
  7. リスクの高い操作の前にブランチを作成する:複雑なリベースの前にバックアップブランチを作成します
# Safe force push
git push --force-with-lease origin feature/branch

# Create backup before risky operation
git branch backup-branch
git rebase -i main
# If something goes wrong
git reset --hard backup-branch

よくある落とし穴

  • 公開ブランチのリベース:共同作業者との履歴の競合を引き起こします
  • リースなしでの強制プッシュ:チームメイトの作業を上書きする可能性があります
  • リベース中の作業の消失:競合を慎重に解決し、リベース後にテストしてください
  • Worktree のクリーンアップ忘れ:孤立した Worktree がディスク容量を消費します
  • 実験前のバックアップ忘れ:必ず安全用のブランチを作成してください
  • 作業ツリーが汚れた状態での Bisect:Bisect の前にコミットするか、スタッシュしてください

復旧コマンド

# Abort operations in progress
git rebase --abort
git merge --abort
git cherry-pick --abort
git bisect reset

# Restore file to version from specific commit
git restore --source=abc123 path/to/file

# Undo last commit but keep changes
git reset --soft HEAD^

# Undo last commit and discard changes
git reset --hard HEAD^

# Recover deleted branch (within 90 days)
git reflog
git branch recovered-branch abc123

リソース

  • references/git-rebase-guide.md:インタラクティブリベースの詳細
  • references/git-conflict-resolution.md:高度な競合解決の戦略
  • references/git-history-rewriting.md:Git の履歴を安全に書き換える方法
  • assets/git-workflow-checklist.md:PR 前の整理チェックリスト
  • assets/git-aliases.md:高度なワークフローに役立つ Git エイリアス
  • scripts/git-clean-branches.sh:マージ済みおよび古いブランチを整理する

落とし穴

  • 共有ブランチでの git pull --rebase はローカルコミットを書き換えます — そのブランチをプルした同僚には、あなたがプッシュしていないにもかかわらず「強制プッシュされた」という警告が表示されます。
  • git rebase --onto X Y..HEAD のセマンティクス:Y は排他的です。Y からリベースするということは、Y ではなく Y+1 から開始するということです。デフォルトの動作は意外に感じられることがあります。
  • 不安定なビルドでの git bisect:誤った「不良」判定によって二分探索の経路が狂います。得られる答えは、与えられた入力に対しては技術的に正しいものです。
  • git reflog はデフォルトで期限切れになります — ブランチは 90 日、HEAD は 30 日です。重要なブランチでは gc.reflogExpire=never を設定してください。
  • -x を付けずに git cherry-pick を実行すると:新しいコミットに元の SHA が記録されず、来歴が失われます。-x を付けると、メッセージに (cherry picked from <sha>) が追加されます。
  • git diff --no-index a b:Git 管理外の 2 つのファイルを比較しますが、シンボリックリンクや大文字・小文字を区別しないファイルシステムではパスの扱いが複雑になります。

コメント