Push

SkillDev tools

Pushes changes on the current branch to origin and creates or updates the corresponding pull request. Use when asked to push, publish updates, or create a pull request.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the Push skill

What this skill tells your AI

The instructions your AI receives, as published by team-mirai/mirai-gikai in .agents/skills/push/SKILL.md and read by ahel’s review.

前提条件

  • gh CLI がインストールされ PATH で利用可能。
  • このリポジトリでの GitHub 操作のために gh auth status が成功する。

ゴール

  • 現在のブランチの変更を origin に安全に push する。
  • ブランチ用の PR がない場合は作成、ある場合は既存の PR を更新する。
  • リモートが進んでいるとき、ブランチの履歴をクリーンに保つ。

関連スキル

  • pull: push が拒否されたり、同期がクリーンでない(non-fast-forward、マージコンフリクトのリスク、古いブランチ)ときに使用する。

手順

  1. 現在のブランチを特定し、リモートの状態を確認する。

  2. push 前にローカル検証(make -C elixir all)を実行する。

  3. 必要に応じて upstream tracking を付けてブランチを origin に push する。設定済みのリモート URL をそのまま使う。

  4. push がクリーンでない・拒否された場合:

    • 失敗が non-fast-forward や同期問題なら、pull スキルを実行して origin/main をマージし、コンフリクトを解決し、検証を再実行する。
    • 再度 push する。履歴を書き換えた場合のみ --force-with-lease を使う。
    • 設定済みリモートの認証・権限・ワークフロー制限による失敗の場合は、リモートを書き換えたりプロトコルを切り替えるワークアラウンドではなく、停止して正確なエラーをそのまま表面化する。
  5. ブランチ用の PR が存在することを確認する:

    • PR がなければ作成する。
    • PR が存在し open ならそれを更新する。
    • ブランチがクローズ/マージ済みの PR に紐づいている場合、新しいブランチ + PR を作成する。
    • 変更の結果を明確に記述する適切な PR タイトルを書く。
    • ブランチ更新の場合、現在の PR タイトルが最新のスコープに合っているかを明示的に再考する。合わなくなっていれば更新する。
  6. PR 本文を .github/pull_request_template.md に従って明示的に書く/更新する:

    • すべてのセクションをこの変更に合わせた具体的な内容で埋める。
    • すべてのプレースホルダコメント(<!-- ... -->)を置き換える。
    • テンプレートが期待する箇所では bullets/checkboxes を維持する。
    • PR が既に存在する場合、最新コミットだけでなくブランチ上のすべての意図された作業(追加・削除・アプローチ変更を含む)を反映するように本文をリフレッシュする。
    • 以前のイテレーションの古い説明文を再利用しない。
  7. mix pr_body.check で PR 本文を検証し、報告されたすべての問題を修正する。

  8. gh pr view の PR URL を返信する。

コマンド

# ブランチを特定
branch=$(git branch --show-current)

# 最小の検証ゲート
make -C elixir all

# 初回 push: 現在の origin リモートを尊重する。
git push -u origin HEAD

# リモートが進んでいたために失敗した場合は pull スキルを使う。pull スキルでの解決と
# 再検証の後、通常の push を再試行する:
git push -u origin HEAD

# 設定済みリモートが認証・権限・ワークフロー制限で push を拒否した場合は、
# 停止して正確なエラーを表面化する。

# ローカルで履歴を書き換えた場合のみ:
git push --force-with-lease origin HEAD

# PR の存在を確認(無い場合のみ作成)
pr_state=$(gh pr view --json state -q .state 2>/dev/null || true)
if [ "$pr_state" = "MERGED" ] || [ "$pr_state" = "CLOSED" ]; then
  echo "現在のブランチはクローズ済みの PR に紐づいています。新しいブランチ + PR を作成してください。" >&2
  exit 1
fi

# 出荷される変更を要約する明確で人間にやさしいタイトルを書く。
pr_title="<この変更のための明確な PR タイトル>"
if [ -z "$pr_state" ]; then
  gh pr create --title "$pr_title"
else
  # ブランチ更新ごとにタイトルを再考。スコープが変わったら編集する。
  gh pr edit --title "$pr_title"
fi

# 検証前に PR 本文を .github/pull_request_template.md と一致するように書く/編集する。
# ワークフロー例:
# 1) テンプレートを開きこの PR の本文ドラフトを書く
# 2) gh pr edit --body-file /tmp/pr_body.md
# 3) ブランチ更新の場合、タイトル/本文が現在の diff と一致するか再確認

tmp_pr_body=$(mktemp)
gh pr view --json body -q .body > "$tmp_pr_body"
(cd elixir && mix pr_body.check --file "$tmp_pr_body")
rm -f "$tmp_pr_body"

# 返信用の PR URL を表示
gh pr view --json url -q .url

ノート

  • --force は使わない。--force-with-lease も最後の手段としてのみ使う。
  • 同期問題とリモート認証/権限問題を区別する:
    • non-fast-forward や古いブランチの問題には pull スキルを使う。
    • 認証・権限・ワークフロー制限はリモートやプロトコルを変更するのではなく、そのまま表面化する。

Signals

GitHub stars
214
Forks
49
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
push-team-mirai
Source
github.com/team-mirai/mirai-gikai