jpskill.com
🛠️ 開発・MCP コミュニティ

git-push

一键推送项目到 GitHub。自动扫描大文件、生成 .gitignore、初始化 Git、创建仓库并推送。支持首次推送、日常更新、版本发布三种模式。当用户说"推到GitHub"、"推送到GitHub"、"git push"、"上传到GitHub"、"发版本"、"打release"、"/git-push"时触发。

⚡ おすすめ: コマンド1行でインストール(60秒)

下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。

🍎 Mac / 🐧 Linux
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o git-push.zip https://jpskill.com/download/21208.zip && unzip -o git-push.zip && rm git-push.zip
🪟 Windows (PowerShell)
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/21208.zip -OutFile "$d\git-push.zip"; Expand-Archive "$d\git-push.zip" -DestinationPath $d -Force; ri "$d\git-push.zip"

完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。

💾 手動でダウンロードしたい(コマンドが難しい人向け)
  1. 1. 下の青いボタンを押して git-push.zip をダウンロード
  2. 2. ZIPファイルをダブルクリックで解凍 → git-push フォルダができる
  3. 3. そのフォルダを C:\Users\あなたの名前\.claude\skills\(Win)または ~/.claude/skills/(Mac)へ移動
  4. 4. Claude Code を再起動

⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。

🎯 このSkillでできること

下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。

📦 インストール方法 (3ステップ)

  1. 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
  2. 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
  3. 3. 展開してできたフォルダを、ホームフォルダの .claude/skills/ に置く
    • · macOS / Linux: ~/.claude/skills/
    • · Windows: %USERPROFILE%\.claude\skills\

Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。

詳しい使い方ガイドを見る →
最終更新
2026-05-18
取得日時
2026-05-18
同梱ファイル
1

📖 Skill本文(日本語訳)

※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。

[Skill 名] git-push

GitHubへのワンクリックプッシュ

機能説明

現在のプロジェクトをワンクリックでGitHubにプッシュし、完全なライフサイクルをカバーします。

  • 初回プッシュ — 新しいプロジェクトをゼロからGitHubへ
  • 日常更新 — ファイルを変更したらプッシュ(commit + push)
  • バージョンリリース — タグ付け + リリース作成、ダウンロードファイルを添付可能

核心原則:安全第一。余計なものをプッシュしないよう、確認を怠りません。


作業フロー

ステップ0:環境チェック + モード判断

以下の前提条件を順にチェックし、いずれかが満たされない場合は中止してガイダンスを提供します。

1. gitがインストールされているか

  • ❌ → 提示:brew install git、中止
  • ✅ → 続行

2. gh CLIがインストールされているか

  • ❌ → 提示:brew install gh、中止
  • ✅ → 続行

3. ghがGitHubにログイン済みか

  • gh auth status を実行してチェック
  • ❌ 未ログイン → 提示:gh auth login、中止
  • ✅ ログイン済み → アカウント名を記録し、ユーザーに「現在ログイン中のアカウント:[xxx]」と伝え、続行

4. gitユーザー情報が設定されているか

  • git config user.namegit config user.email を実行してチェック
  • ❌ 未設定 → ユーザーに設定を促す:
    git config --global user.name "あなたの名前"
    git config --global user.email "あなたのメールアドレス"

    中止

  • ✅ 設定済み → 続行

5. 現在のディレクトリがgitリポジトリであるか → どのパスに進むかを決定

gitリポジトリではない → 【初回プッシュ】ステップ1から開始
gitリポジトリだが、remoteがない → 「ローカルにgitはあるがリモートと関連付けられていない」
    → まずステップ1の大きなファイルのスキャンを実行(安全を確保)
    → その後、ステップ2にスキップしてリモートを関連付ける
gitリポジトリで、remoteがある → 【既存リポジトリ】モード選択に入る:
    ├── 「日常更新をプッシュ」 → ステップ3Bにスキップ(日常更新)
    ├── 「新しいバージョンをリリース」 → 未コミットの変更があるかチェック
    │   ├── 変更あり → まずステップ3Bを実行し、その後ステップ4に進む
    │   └── 変更なし → 直接ステップ4にスキップ(タグ付け + Releaseのみ)
    └── 「やり直す」
        → ⚠️ 警告:「これにより、すべてのGit履歴(すべてのコミット、ブランチ、タグを含む)が削除され、回復できません。」
        → ユーザーが二次確認後、.gitを削除し、ステップ1から開始

ステップ1:プロジェクトスキャン + .gitignore生成

⚠️ 鉄則:.gitignoreは最初の git add の前に配置する必要があります。先にコミットしてから除外してはいけません。Git履歴内の大きなファイルは完全に削除できず、リポジトリが肥大化し、プッシュが失敗する原因となります。

1.1 ディレクトリサイズのスキャン

du -sh を使用してすべてのトップレベルディレクトリとファイルをスキャンし、サイズ順にソートします。

大きなファイルの段階的処理:

サイズ 処理方法
>10MB リストアップし、ユーザーに「プッシュしますか?」と個別に尋ねる
>50MB 追加で「サイズが大きいため、プッシュに時間がかかります」と警告
単一ファイル >100MB 必ず除外、GitHubのハードリミットによりプッシュ不可

表示形式(例):

スキャンにより、以下の内容が10MBを超えていることが判明しました:

  1. 109MB  slides/   (PPT + 大きな画像)
  2.  12MB  assets/   (動画ファイル)

⚠️ そのうち slides/ は50MBを超えており、プッシュに非常に時間がかかります。
❌ そのうち recording.mp4 (150MB) はGitHubの100MB単一ファイル制限を超えているため、必ず除外する必要があります。

どれを除外しますか?(番号を入力、または「すべて除外」 / 「すべて保持」)

1.2 機密コンテンツのスキャン(公開リポジトリのみ)

ユーザーが公開リポジトリを選択した場合、追加でスキャンします。

  • .env / .env.* — 環境変数/秘密鍵
  • *secret* / *credential* / *token* — 秘密鍵ファイル
  • *.pem / *.key — 証明書ファイル
  • memory/ / MEMORY.md — AIツール記憶ファイル
  • プライベートコンテンツと思われるファイル

除外を推奨する項目をリストアップし、ユーザーに各項目を確認させます。

1.3 .gitignoreの生成または更新

.gitignoreが存在しない場合:スキャン結果に基づいて新しいファイルを生成します。

.gitignoreが既に存在する場合:既存の内容を読み込み、新しい除外項目をマージし、差分をユーザーに確認させます。ユーザーの既存のルールは上書きしません。

基本テンプレート:

# macOS
.DS_Store
.AppleDouble
.LSOverride
._*

# Editor
*.swp
*.swo
*~
.vscode/
.idea/

# [以下はスキャン結果に基づいて動的に生成されます]
# 大きなファイル(ユーザーが除外を確認)
[パス1]
[パス2]

# 機密コンテンツ(公開リポジトリの場合のみ)
[パス3]

ユーザーに確認後、ファイルに書き込みます。


ステップ2:ユーザーの決定

1. リポジトリ名(デフォルト:現在のディレクトリ名)

2. 説明(一文、空欄可)

3. 公開 / プライベート

  • 公開 → 二次確認:「公開リポジトリは誰でも閲覧できますが、.gitignoreで機密コンテンツが除外されていることを確認しましたか?」
    • 確認しない → ステップ1.2(機密コンテンツスキャン)に戻って再審査し、完了後このステップに戻って続行

4. 同名リポジトリのチェック

  • gh repo view [アカウント]/[リポジトリ名] を実行してチェック
  • ❌ 存在しない → 続行
  • ✅ 既に存在 → ユーザーに伝え、尋ねる:
    • 「別の名前に変更」 → 再入力
    • 「この既存リポジトリを使用」 → 作成をスキップし、直接リモートを関連付ける(ステップ3で使用するためにリポジトリURLを記録)
    • 「削除して再作成」 → ユーザーの二次確認が必要

ステップ3:プッシュ

3A. 初回プッシュ(新規プロジェクト)

以下の順序で厳密に実行します。

1. git init + git branch -m main
2. git add -A
3. git commit -m "init: [リポジトリ名]を初期化"
4. リモートリポジトリの作成(ステップ2でリポジトリが存在しなかった場合):
   gh repo create [リポジトリ名] --private/--public --description "[説明]" --source=. --remote=origin
   (ステップ2でユーザーが「既存リポジトリを使用」を選択した場合、作成をスキップし、直接:git remote add origin [既存リポジトリURL])
5. git push -u origin main

3B. 日常更新(既存リポジトリ)

1. 変更のスキャン:git status で何が変更されたかを確認
2. 新規追加された大きなファイルのチェック:
   - 新規ファイルの中に10MBを超えるものがある → ユーザーに確認を求める
   - 新規ファイルの中に単一ファイルで100MBを超えるものがある → 必ず除外、.gitignoreに追加
   - .gitignoreが変更された場合、.gitignore自体も後続の git add の範囲内にあることを確認
3. git add -A
4. git commit -m "[変更内容に基づいてコミットメッセージを自動生成]"
   - コミットメッセージのルール:簡潔で分かりやすく、主要な変更を一文で要約
   - 例:「update: ユーザーモジュールを追加 + ログインバグを修正」
5. git push

プッシュ失敗時の処理

エラー 原因 処理
rejected (fetch first) または non-fast-forward リモートにローカルにないコミットがある デフォルトで git pull --rebase を実行後、再試行
依然として失敗 / リモートに競合がある 履歴の非互換性 ユーザーに「リモートを強制的に上書きしますか?」と尋ねる ⚠️ 警告:「これによりリモートのすべての内容が上書きされます。リモートの内容を破棄してもよい場合にのみ使用してください」→ git push --force
タイムアウト/停止 ネットワークまたはリポジトリが大きすぎる リポジトリサイズをチェックし、大きなファイルを除外してから再試行することを推奨
認証失敗 tokenの期限切れ gh auth login を促す
file exceeds 100MB 単一ファイルが制限超過 具体的なファイル名を提示し、.gitignoreに追加して、再コミット・プッシュ
git add または git commit 失敗 ファイル異常/設定不足 エラーメッセージを表示し、ユーザーにトラブルシューティングを促す

ステップ4:オプション — バージョンリリース(Release)

トリガータイミング

  • 初回プッシュ後、一度「バージョンをリリースしますか?」と尋ねる
  • 日常更新後、積極的に尋ねない(邪魔を避けるため)
  • ユーザーが「バージョンをリリース」「リリースを作成」「タグを打つ」と明示的に指示した場合

フロー

1. バージョン番号の決定

現在存在するタグを読み込む(git tag --sort=-v:refname | head -5)

├── タグが一つもない → v0.1.0を推奨
└── 既存のタグがある → 最新のバージョンを表示し、次のバージョンを推奨(デフォルトはminor +1)
    - v0.1.0 → v0.2.0を推奨
    - v1.2.3 → v1.3.0を推奨
    - ユーザーは任意のバージョン番号をカスタム入力可能

バージョン番号の説明(ユーザー向け参考):
- v0.1.0 → v0.2.0  小規模な更新(機能追加、内容変更)
- v0.2.0 → v1.0.0  大きなマイルストーン(初の正式リリース、大規模なリファクタリング)
- v1.0.0 → v1.0.1  修正(バグ修正)

2. Release説明

  • 前回のタグからのコミット履歴を自動的に読み込む(git log [前回のタグ]..HEAD --oneline
  • 変更の概要を生成し、ユーザーに確認または修正を求める
  • 最初のバージョン(履歴タグなし)の場合、すべてのコミットから概要を生成

3. ダウンロードファイルを添付するか

ダウンロード可能なファイルを添付する必要がありますか?(例:Appインストールパッケージ、ツール圧縮ファイルなど)

├── 不要 → タグ付け + Releaseページ作成のみ
└── 必要 → ユーザーがファイルパスを提供
    └── ファイルの存在をチェック → 存在しない場合は再入力を促す

4. 実行

git tag [version]
git push origin [version]
gh release create [version] --title "[リポジトリ名] [version]" --notes "[Release説明]"
# 添付ファイルがある場合:
gh release upload [version] [ファイルパス]

Release失敗時の処理:

  • タグが既に存在 → ユーザーに「このバージョン番号は既に使用されています」と伝え、別のものを選択させる
  • 添付ファイルが存在しない → パスの再入力を促す
  • その他のエラー → エラーメッセージを表示

完了時の出力

✅ プッシュが完了しました!

- リポジトリ:[URL]
- 可視性:プライベート / 公開
- ファイル数:[N] 個
- リポジトリサイズ:[X]
- 除外項目:[.gitignoreで除外された内容をリストアップ]
- Release:[バージョン番号 + URL] / 未作成

核心原則

1. スキャンが最優先

.gitignoreは最初の git add の前に配置されます。大きなファイルが一度Git履歴に入ると、後で削除してもリポジトリのサイズは縮小せず、プッシュの失敗や極端な遅延を引き起こす可能性があります。既存のgitリポジトリでリモートと関連付けられていないプロジェクトも、プッシュ前にまずスキャンする必要があります。

2. 大きなファイルの積極的なブロック

10MBを超えるファイルはユーザーに積極的に尋ねます。50MBを超える場合は遅延の警告を出し、100MBを超える単一ファイルはGitHubのハードリミットにより必ず除外します。日常更新時も新規追加ファイルのサイズをチェックします。

3. 公開リポジトリの二重チェック

公開リポジトリでは、機密コンテンツ(秘密鍵、AI記憶ファイル、プライベート文書)を別途スキャンし、プッシュ前に二次確認を行います。

4. 既存コンテンツを破壊しない

プロジェクトに既に.gitや.gitignoreが存在する場合、デフォルトでは上書きせず、まずユーザーに尋ねます。.gitの削除などの破壊的な操作は、明確に結果を警告し、二次確認が必要です。

5. 各ステップで中断可能

ユーザーはいつでも「停止」または「前のステップに戻る」と言うことができます。ユーザーに反応する機会を与えずに一気に実行してはいけません。

6. 日常更新は軽量に

日常更新ではReleaseについて尋ねず、リポジトリ名も尋ねず、プロジェクト全体を再スキャンしません。新規追加された大きなファイルのみをチェックし、コミット + プッシュで迅速に完了します。


使用例

シナリオ1:新規プロジェクトの初回プッシュ

ユーザー:GitHubにプッシュして

Skill:
→ 環境チェック:git ✅ gh ✅ ログイン済み ✅ gitユーザー設定済み ✅ gitリポジトリではない
→ プロジェクトをスキャン中...10MBを超えるコンテンツを発見:
  - 85MB slides/ → ユーザーが除外を確認
  - 15MB images/ → ユーザーが保持を確認
→ .gitignoreを生成、ユーザーが確認
→ リポジトリ名:my-project、プライベート
→ 初期化 + プッシュ成功
→ 「Releaseを作成しますか?」 → スキップ
→ ✅ 完了

シナリオ2:日常更新

ユーザー:プッシュして

Skill:
→ リモートリポジトリと関連付けられていることを検出
→ 変更のスキャン:3つのファイルを変更、2つのファイルを新規追加(すべて10MB未満)
→ コミットメッセージ:「update: ユーザーモジュールを追加 + 設定ファイルを更新」
→ プッシュ成功
→ ✅ 完了

シナリオ3:バージョンリリース

ユーザー:リリースを作成して

Skill:
→ 現在の最新タグ:v0.1.0
→ 「次のバージョン番号はv0.2.0を推奨しますが、よろしいですか?」
→ 変更の概要を自動生成(コミット履歴に基づく)
→ 「ダウンロードファイルを添付する必要がありますか?」 → 不要
→ タグ付け + Release作成
→ ✅ Release v0.2.0が公開されました!

シナリオ4:プッシュ時に大きなファイルを発見

→ git push 失敗:file recording.mp4 exceeds 100MB
→ 「recording.mp4 (150MB) はGitHubの制限を超えているため、除外する必要があります」
→ .gitignoreに追加、再コミット・プッシュ

(原文がここで切り詰められています)
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開

一键推送 GitHub

功能说明

把当前项目一键推送到 GitHub,覆盖完整生命周期:

  • 首次推送 — 新项目从零到 GitHub
  • 日常更新 — 改了文件,推一下(commit + push)
  • 版本发布 — 打 tag + 创建 Release,可附带下载文件

核心原则:安全第一。宁可多问一句,不能把不该推的东西推上去。


工作流程

第0步:环境检查 + 模式判断

依次检查前置条件,任一不满足就终止并给出指引:

1. git 是否安装

  • ❌ → 提示:brew install git,终止
  • ✅ → 继续

2. gh CLI 是否安装

  • ❌ → 提示:brew install gh,终止
  • ✅ → 继续

3. gh 是否已登录 GitHub

  • 执行 gh auth status 检查
  • ❌ 未登录 → 提示:gh auth login,终止
  • ✅ 已登录 → 记录账号名,告诉用户"当前登录账号:[xxx]",继续

4. git 用户信息是否配置

  • 执行 git config user.namegit config user.email 检查
  • ❌ 未配置 → 提示用户设置:
    git config --global user.name "你的名字"
    git config --global user.email "你的邮箱"

    终止

  • ✅ 已配置 → 继续

5. 当前目录是否已是 git 仓库 → 决定走哪条路

不是 git 仓库 → 【首次推送】从第1步开始
是 git 仓库,无 remote → "本地有 git 但没关联远程"
    → 先执行第1步的大文件扫描(确保安全)
    → 再跳到第2步关联远程
是 git 仓库,有 remote → 【已有仓库】进入模式选择:
    ├── "推日常更新" → 跳到第3B步(日常更新)
    ├── "发新版本"   → 检查是否有未提交的变更
    │   ├── 有变更 → 先走第3B步,再走第4步
    │   └── 无变更 → 直接跳到第4步(只打 tag + Release)
    └── "重新来"
        → ⚠️ 警告:"这将删除所有 Git 历史记录(包括所有提交、分支、tag),不可恢复。"
        → 用户二次确认后删除 .git,从第1步开始

第1步:项目扫描 + .gitignore 生成

⚠️ 铁律:.gitignore 必须在第一次 git add 之前就位。绝不能先提交再排除——Git 历史里的大文件删不干净,会导致仓库臃肿、推送失败。

1.1 扫描目录大小

du -sh 扫描所有顶级目录和文件,按大小排序。

大文件分级处理:

大小 处理方式
>10MB 列出,逐个问用户"要推吗?"
>50MB 额外警告"较大,推送会比较慢"
单文件 >100MB 必须排除,GitHub 硬限制,推不上去

展示格式(示例):

扫描发现以下内容超过 10MB:

  1. 109MB  slides/   (PPT + 大图片)
  2.  12MB  assets/   (视频文件)

⚠️ 其中 slides/ 超过 50MB,推送会很慢。
❌ 其中 recording.mp4 (150MB) 超过 GitHub 100MB 单文件限制,必须排除。

要排除哪些?(输入序号,或 "全部排除" / "全部保留")

1.2 敏感内容扫描(仅公开仓库)

如果用户选了公开仓库,额外扫描:

  • .env / .env.* — 环境变量/密钥
  • *secret* / *credential* / *token* — 密钥文件
  • *.pem / *.key — 证书文件
  • memory/ / MEMORY.md — AI 工具记忆文件
  • 任何看起来像私人内容的文件

列出建议排除项,让用户逐项确认。

1.3 生成或更新 .gitignore

如果不存在 .gitignore:基于扫描结果生成新文件。

如果已存在 .gitignore:读取现有内容,将新增排除项合并进去,展示差异让用户确认。不覆盖用户已有的规则。

基础模板:

# macOS
.DS_Store
.AppleDouble
.LSOverride
._*

# Editor
*.swp
*.swo
*~
.vscode/
.idea/

# [以下根据扫描结果动态生成]
# 大文件(用户确认排除)
[路径1]
[路径2]

# 敏感内容(仅公开仓库时)
[路径3]

展示给用户确认后写入文件。


第2步:用户决策

1. 仓库名(默认:当前目录名)

2. 描述(一句话,可留空)

3. 公开 / 私有

  • 公开 → 二次确认:"公开仓库所有人可见,确认 .gitignore 已排除敏感内容?"
    • 不确认 → 回到第1.2步(敏感内容扫描)重新审查,完成后回到本步骤继续

4. 检查同名仓库

  • 执行 gh repo view [账号]/[仓库名] 检查
  • ❌ 不存在 → 继续
  • ✅ 已存在 → 告诉用户,问:
    • "换个名字" → 重新输入
    • "用这个已有仓库" → 跳过创建,直接关联 remote(记录仓库 URL 供第3步使用)
    • "删掉重建" → 需用户二次确认

第3步:推送

3A. 首次推送(新项目)

按以下顺序严格执行:

1. git init + git branch -m main
2. git add -A
3. git commit -m "init: 初始化 [仓库名]"
4. 创建远程仓库(如果第2步中仓库不存在):
   gh repo create [仓库名] --private/--public --description "[描述]" --source=. --remote=origin
   (如果第2步中用户选了"用已有仓库",跳过创建,直接:git remote add origin [已有仓库URL])
5. git push -u origin main

3B. 日常更新(已有仓库)

1. 扫描变更:git status 查看改了什么
2. 检查新增大文件:
   - 新增文件中有 >10MB 的 → 问用户确认
   - 新增文件中有单文件 >100MB → 必须排除,加入 .gitignore
   - 如果修改了 .gitignore,确保 .gitignore 本身也在后续的 git add 范围内
3. git add -A
4. git commit -m "[根据变更内容自动生成提交信息]"
   - 提交信息规则:简洁明了,一句话概括主要变更
   - 示例:"update: 新增用户模块 + 修复登录 bug"
5. git push

推送失败处理

错误 原因 处理
rejected (fetch first)non-fast-forward 远程有本地没有的提交 默认执行 git pull --rebase 后重试
仍然失败 / 远程有冲突 历史不兼容 问用户"是否强制覆盖远程?" ⚠️ 告知:"这将覆盖远程所有内容,仅在确认远程内容可以丢弃时使用"→ git push --force
超时/卡住 网络或仓库太大 检查仓库大小,建议排除大文件后重试
认证失败 token 过期 提示 gh auth login
file exceeds 100MB 单文件超限 提示具体文件名,加入 .gitignore,重新提交推送
git addgit commit 失败 文件异常/配置缺失 显示错误信息,引导用户排查

第4步:可选 — 版本发布(Release)

触发时机

  • 首次推送后,主动问一次"需要打版本吗?"
  • 日常更新后,不主动问(避免打扰)
  • 用户主动说"发版本"、"打 release"、"打 tag"

流程

1. 确定版本号

读取当前已有的 tag(git tag --sort=-v:refname | head -5)

├── 没有任何 tag → 建议 v0.1.0
└── 已有 tag → 显示最近的版本,建议下一个(默认 minor +1)
    - v0.1.0 → 建议 v0.2.0
    - v1.2.3 → 建议 v1.3.0
    - 用户可自定义输入任意版本号

版本号说明(供用户参考):
- v0.1.0 → v0.2.0  小更新(加了功能、改了内容)
- v0.2.0 → v1.0.0  大里程碑(首次正式发布、重大重构)
- v1.0.0 → v1.0.1  修修补补(修了个 bug)

2. Release 说明

  • 自动读取自上个 tag 以来的 commit 记录(git log [上个tag]..HEAD --oneline
  • 生成变更摘要,让用户确认或修改
  • 如果是第一个版本(无历史 tag),用所有 commit 生成摘要

3. 是否附带下载文件

需要附带可下载文件吗?(如 App 安装包、工具压缩包等)

├── 不需要 → 只打 tag + 创建 Release 页面
└── 需要 → 用户提供文件路径
    └── 检查文件是否存在 → 不存在则提示重新输入

4. 执行

git tag [version]
git push origin [version]
gh release create [version] --title "[仓库名] [version]" --notes "[Release 说明]"
# 如果有附件:
gh release upload [version] [文件路径]

Release 失败处理:

  • tag 已存在 → 提示用户"这个版本号已被使用",让用户换一个
  • 附件文件不存在 → 提示重新输入路径
  • 其他错误 → 显示错误信息

完成输出

✅ 推送完成!

- 仓库:[URL]
- 可见性:私有 / 公开
- 文件数:[N] 个
- 仓库大小:[X]
- 排除项:[列出被 .gitignore 排除的内容]
- Release:[版本号 + URL] / 未创建

核心原则

1. 扫描先于一切

.gitignore 在第一次 git add 之前就位。大文件一旦进入 Git 历史,即使后来删除,仓库体积也不会缩小,会导致推送失败或极慢。已有 git 但未关联远程的项目,也要先扫描再推送。

2. 大文件主动拦截

10MB 以上主动问用户。50MB 以上警告慢,100MB 单文件是 GitHub 硬限制必须排除。日常更新时也要检查新增文件大小。

3. 公开仓库双重检查

公开仓库额外扫描敏感内容(密钥、AI 记忆文件、私人文档),并在推送前二次确认。

4. 不破坏已有内容

如果项目已有 .git 或 .gitignore,默认不覆盖,先问用户。删除 .git 等破坏性操作必须明确警告后果并二次确认。

5. 每一步可中断

用户随时可以说"停"或"回到上一步"。不要一口气跑完不给用户反应的机会。

6. 日常更新要轻

日常更新不问 Release、不问仓库名、不重新扫描全项目。只检查新增大文件,commit + push,快进快出。


使用示例

场景1:新项目首次推送

用户:帮我推到 GitHub

Skill:
→ 检查环境:git ✅ gh ✅ 已登录 ✅ git 用户已配置 ✅ 不是 git 仓库
→ 扫描项目...发现超过 10MB 的内容:
  - 85MB slides/ → 用户确认排除
  - 15MB images/ → 用户确认保留
→ 生成 .gitignore,用户确认
→ 仓库名:my-project,私有
→ 初始化 + 推送成功
→ "需要打 Release 吗?" → 跳过
→ ✅ 完成

场景2:日常更新

用户:推一下

Skill:
→ 检测到已关联远程仓库
→ 扫描变更:修改 3 个文件,新增 2 个文件(均 <10MB)
→ 提交信息:"update: 新增用户模块 + 更新配置文件"
→ 推送成功
→ ✅ 完成

场景3:发版本

用户:打个 release

Skill:
→ 当前最新 tag:v0.1.0
→ "建议下一个版本号 v0.2.0,可以吗?"
→ 自动生成变更摘要(基于 commit 记录)
→ "需要附带下载文件吗?" → 不需要
→ 创建 tag + Release
→ ✅ Release v0.2.0 发布成功!

场景4:推送时发现大文件

→ git push 失败:file recording.mp4 exceeds 100MB
→ "recording.mp4 (150MB) 超过 GitHub 限制,需要排除"
→ 加入 .gitignore,重新提交推送
→ ✅ 成功

场景5:日常更新时新增大文件

用户:推一下

→ 扫描变更...发现新增文件:
  - demo.pptx (25MB)
→ "这个文件 25MB,确认要推吗?"
→ 用户确认排除 → 加入 .gitignore
→ 推送成功
→ ✅ 完成

场景6:发版本但没有新变更

用户:打个 release

→ 当前没有未提交的变更,直接进入版本发布
→ 当前最新 tag:v0.2.0
→ "建议 v0.3.0,可以吗?"
→ 用户自定义输入 v1.0.0
→ 生成变更摘要 + 创建 Release
→ ✅ Release v1.0.0 发布成功!