SKILL ARTICLE / git-range-diff-review
パッチ系列の更新を、コミット単位で読み直す
ブランチの先端差分ではなく、パッチ系列の変化を読む。
Gitの`range-diff`で旧版と新版のコミット範囲を比べ、対応候補、変更、追加、削除を、確認が必要な点とともに整理するSkill案です。出力は人が読むための不安定な形式なので、自動判定には使いません。
この記事で紹介するSkill案は、参考資料を読んだうえで私が考えたものです。参照先が提供・評価・推奨しているものではありません。
OVERVIEW → CAN DO → BUILD
知ったことをSkillづくりに活かす
ブランチ先端の差分だけでは見えにくい再構成も、旧版と新版のcommit範囲を比較すると、対応候補、変更、追加、削除の単位で確認できる。ただし対応付けは推定で、出力形式も安定したAPIではない。
系列全体の差だけでなく、維持、変更、追加、削除されたpatch候補を根拠付きで分け、次に読むcommitとtestを決められる。
branchやtagは後から動くことがあります。Skillの入力と結果には、旧版・新版の範囲式に加えて、確認時に各refが指したcommit IDとGit versionを記録し、同じ比較を追跡できるよ...
01 / OVERVIEW
資料の概要
Git公式の`git-range-diff`文書は、2つのパッチ系列、より一般には2つのコミット範囲の違いを表示するコマンドを説明しています。この記事ではGit v2.55.0のtagに対応するcommit `e9019fcafe0040228b8631c30f97ae1adb61bcdc`へ資料を固定しました。git-scmのversion別公式文書では、v2.55.0の更新日が2026年6月29日と表示されています。Git本体のライセンスはGNU General Public License version 2です。
公式文書によると、`range-diff`は両範囲のpatch、すなわち著者情報、commit message、commit diffの近さから対応するcommit候補を探し、新しい側の順序で表示します。merge commitは既定で比較対象から外れます。大きな変更を削除と追加に分けてしまう場合などは、既定60の`--creation-factor`を調整できます。ただし、対応付けは最小コストの推定であり、同じ目的の変更だと保証するものではありません。
出力は人が読むためのporcelainで、Gitのversionをまたいで文字列が安定する形式でも、機械可読な形式でもありません。公式資料はこの記事のSkill案を提供、評価、推奨していません。この記事は、公式コマンドの結果をレビューの確認項目へ読み替える提案です。
02 / CAN DO
できるようになること
Skill案では、利用者が指定した信頼できるローカルrepositoryと、旧版・新版それぞれのcommit範囲を入力にします。最初にGit version、各refが指すcommit、実行した範囲式を記録し、working tree、branch、remoteを書き換えずに`git range-diff --no-color`を実行します。出力から、同一と推定されたcommit、内容が変わった対応候補、旧版だけ、新版だけの項目を、人が確認する一覧へ整理します。
対応が不自然な場合は、範囲指定の誤りと大幅なpatch変更を先に確認します。`--creation-factor`を変える場合は、値と前後の結果を並べて感度確認として扱い、都合のよい対応だけを正解にしません。2026年9月11日にGit 2.53.0で作った小さなfixtureでは、既定値が1行の値変更を削除と追加に分け、`--creation-factor=100`では同じcommitの変更候補として対応付けました。これは小さな実測例で、他のrepositoryでも100が適切だという意味ではありません。
この整理だけでは、変更意図、正しさ、回帰、test結果、review commentへの対応を確定できません。出力は文字列parserへ渡さず、原文、Git version、範囲、補助optionとともに人間向けの証拠として残します。mergeを含む履歴は既定で無視されるため、必要なら公式文書に従って別途確認し、Skillが自動でrebase、checkout、fetch、pushを行わない設計にします。
活かしやすい場面
- review指摘後に作り直された複数commitのbranchを比べる
- rebase前後でpatchの内容が意図どおり保たれたか確認する
- メールで再投稿されたpatch seriesの変更点を絞る
使う前に確認したい場面
- working treeの未commit変更だけを比べる作業
- `range-diff`の対応付けだけで変更意図や正しさを確定する判断
- 出力文字列を長期安定する機械可読APIとして処理する自動化
- 信頼できないrepositoryで設定や補助programの影響を未確認のまま実行する作業
03 / BUILD
自分たちのSkill作成に活かせること
文章やコードをそのまままねるのではなく、自分たちのSkillに取り入れたい判断基準や工程の分け方を整理しました。
比較対象をref名だけで残さない
branchやtagは後から動くことがあります。Skillの入力と結果には、旧版・新版の範囲式に加えて、確認時に各refが指したcommit IDとGit versionを記録し、同じ比較を追跡できるようにします。
対応候補と変更意図を分ける
`range-diff`の対応付けはpatchの近さに基づく推定です。Skillは同じ目的だと断定せず、対応候補、旧版だけ、新版だけを示し、変更意図と採否はcommit本文やtestなどの追加証拠へ委ねます。
人間向け出力を固定schemaに見せない
公式文書は出力がversion間で安定せず、機械可読でもないと明記しています。Skillでは記号や行位置を永続的なAPIとしてparseせず、原文を保持したうえで確認項目を要約します。
04 / WORKFLOW
Skillにするときの流れ
- 01
範囲と実行条件を固定
旧版・新版の範囲式、各refのcommit ID、Git versionを記録し、比較対象が期待したcommit列か確認する。
- 02
読み取り専用で比較
信頼できるローカルrepositoryで`git range-diff --no-color`を実行し、原文と実行optionを保存する。
- 03
対応候補と不足証拠を整理
同一候補、変更候補、旧版だけ、新版だけをまとめ、対応が不自然な箇所、merge、test、変更意図を追加確認へ回す。
05 / TRY
試すときに使える依頼文
これは完成したSkillではありません。先に依頼文として試し、期待する結果が返ってくるかを確かめるための試作プロンプトです。
この信頼できるローカルGit repositoryで、旧版と新版のpatch seriesを比較してください。実行前にGit version、旧版・新版の範囲式、各refのcommit ID、各範囲のcommit一覧を記録してください。working tree、branch、remoteを書き換えず、まず`git range-diff --no-color`で原文を取得し、同一候補、変更候補、旧版だけ、新版だけ、対応が不自然な箇所へ整理してください。`--creation-factor`を変える場合は値と前後の結果を並べ、感度確認として扱ってください。出力を安定した機械可読形式としてparseせず、変更意図、正しさ、回帰は断定しないでください。最後に追加で読むcommit、test、mergeの確認項目を示してください。
06 / BUILD BRIEF
試作するときの設計メモ
これは配布済みのSkillではありません。対象を小さく絞り、停止条件と評価ケースを足しながら確かめるための出発点です。
旧版と新版のpatch seriesを`git range-diff`で比較し、再レビュー箇所を整理するSkillを作る。入力は利用者が許可した信頼できるローカルrepository、2つのcommit範囲、任意のpathに限定する。実行前にGit version、範囲式、各refのcommit ID、commit一覧を記録し、対象の取り違えでは停止する。比較は読み取り専用で、working tree、branch、remoteを変更しない。既定結果を保存し、同一候補、変更候補、旧版だけ、新版だけ、対応不自然へ人間向けに整理する。`--creation-factor`変更は感度確認として前後を併記し、自動的な正解選択に使わない。出力は機械可読・version間安定ではないため固定parserを作らない。mergeは既定で無視されること、対応はpatch類似度による推定であることを常に表示し、変更意図、正しさ、test合格を断定しない。`fetch`、`checkout`、`rebase`、`reset`、`push`は行わない。
07 / WATCHOUTS
人が確認するところ
- Skillは`fetch`、`checkout`、`rebase`、`reset`、`push`を自動実行せず、利用者が許可したローカルrefの読み取りに限定します。
- 信頼できないrepositoryではGit設定、attributes、外部diffやtextconvなどの影響を確認するまで実行しません。必要に応じて`--no-ext-diff`と`--no-textconv`を使います。
- 出力は機械可読・version間安定ではありません。固定parserで自動判定やpublication gateを作りません。
- 対応付けは変更意図、正しさ、test合格の証明ではありません。差が小さくてもtestとreviewを省略しません。
- merge commitは既定で比較対象から外れるため、mergeを含む履歴を完全に確認したとは主張しません。