Commit and PR
現在の変更を安全に公開し、レビュー可能な Pull Request を作成する。
ワークフロー
- 作業ツリー、差分、現在のブランチ、リモート、リポジトリ固有の指示・PR テンプレートを確認し、今回含める変更と公開先リポジトリを特定する。
- デフォルトブランチまたは保護ブランチ上にいる場合は、変更内容に合う作業ブランチを作成する。既存の作業ブランチは、目的が今回の変更と一致する場合にそのまま使う。ブランチの作成・切替後に、実際にプッシュする head(リポジトリ・所有者・ブランチ)を確定する。
- 確定した repo・head の open PR を調べてから base を決める。ユーザーが base を指定していればそれを優先する。未指定で既存 open PR が一意ならその base を引き継ぎ、既存 PR がなければ公開先の既定ブランチを使う。複数候補があり依頼から確定できない場合だけ確認する。
- 未コミットの対象変更がある場合だけステージし、ステージ済み差分を確認する。秘密情報、認証情報、意図しない生成物、無関係なユーザー変更は含めない。作業ツリーがクリーンでも、対象ブランチの未公開コミットと確定した base からの全体差分を確認して続行する。
- 変更に応じた検証を行い、結果を記録する。失敗を解消できない場合は、成功したように扱わずユーザーへ伝える。
- 未コミットの対象変更があれば、定められたフォーマットで適切な単位のコミットを作成する。コミット済みの場合は空コミットを追加しない。
- 必要なコミットを対象リモートにプッシュする。以下の既存 PR の確認手順に従って PR を作成または更新する。内容は base からの全体差分と実施した検証に基づき、事実を正確に記載する。
- PR の URL と、レビュー時に知っておくべき検証結果や残課題を返す。
既存 PR と再実行
- base の確定前に、公開先リポジトリを明示して対象 head の PR を調べる。この初回照会では base で絞り込まず、既定ブランチ以外への PR も取得する。ブランチ名だけで判断せず、head のリポジトリ・所有者・ブランチ、base ブランチ、open/closed/merged の状態を確認する。fork からの PR は head と base のリポジトリが異なる点に注意する。
- repo・head・base が一致する open PR があれば、新規作成せずその PR を更新する。プッシュが必要な場合は反映後の head を確認し、最終差分に合わせてタイトル・本文を整える。ユーザーが追加した有効な背景やレビュー情報は保持する。
- 同じ head でも base が異なる PR を、無断で別 base に変更しない。複数候補があり依頼から対象を確定できない場合に限り確認する。closed/merged の PR は再利用せず、今回の base との差分に対して新規 PR が必要かを判断する。
- 未公開コミットがあればプッシュし、プッシュ済みでも対象 PR が未作成なら作成する。再実行時に PR 作成の応答が不明だった場合は、既存 PR を再照会して重複作成を防ぐ。
- 作業ツリーの差分がないことだけで終了しない。対象コミットが公開済みで、対象 PR も現在の差分を反映済みなら、その URL と状態を返す。base との差分も公開すべき変更もなければ、空の PR を作らずその旨を報告する。
フォーマット
コミットメッセージ
書式と言語は PR と同じ優先順位に従う。指定がない場合、コミットメッセージは、1行目に変更内容を端的に表す日本語の要約を書き、空行の後に2行目以降で含まれる変更を箇条書きにする。
<変更内容の要約>
- <含まれる変更1>
- <含まれる変更2>
PR
PR タイトルは base から head までの変更全体を表す要約にし、言語は下記の優先順位に従う。単一コミットならその要約を使ってよい。複数コミットでは直近のメッセージを流用せず、コミット一覧と全体差分から目的・結果をまとめる。
ユーザーの明示指定、リポジトリ固有の指示・PR テンプレート、このスキルの既定書式の順に優先する。テンプレートがある場合は、その見出し・必須項目・チェックリストを保持し、以下の背景・変更・レビュー観点・検証情報を対応する項目へ記載する。言語指定がなければ日本語を使う。
テンプレートなどの指定がない場合は、次の見出しを順番どおりに使用する。該当する内容がない場合は なし と記載する。
## 背景・目的
<変更が必要になった理由>
## 変更内容
- <主な変更点>
## レビューのポイント
- <確認してほしい点>
## 検証
- [x] <実行した検証>
- [ ] <未実行の検証または残課題>
制約
- 空コミットや空の PR を作らない。未コミット変更・未公開コミット・base との差分・既存 PR の状態を区別して判断する。
- 複数行の PR 本文を CLI に渡す場合は、一時ファイルへ実際の改行を含めて書き、
--body-fileなどで渡す。 - ユーザーの明示的な許可なしに force push、検証フックの回避、公開済みコミットの amend を行わない。
- 対象変更が曖昧で、無関係な変更を巻き込む可能性がある場合は、コミット前に確認する。
- 認証、権限、競合、必須チェックなどで公開を完了できない場合は、既に完了した操作と阻害要因を明確に報告する。