| name | commit-push-pr |
| description | Commit, push, and create or update a PR |
| license | MIT |
| allowed-tools | Bash(git checkout -b:*), Bash(git add:*), Bash(git status:*), Bash(git branch:*), Bash(git config:*), Bash(git push:*), Bash(git commit:*), Bash(git log:*), Bash(git diff:*), Bash(gh pr create:*), Bash(gh pr list:*), Bash(gh pr edit:*), Bash(gh repo view:*), Skill(commit) |
| model | sonnet |
Context
- Current git status: !
git status
- Current branch: !
git branch --show-current
- PR base branch: !
b=$(git branch --show-current); gh=$(git config branch."$b".github-pr-base-branch 2>/dev/null); gh=${gh##*#}; vsc=$(git config branch."$b".vscode-merge-base 2>/dev/null); vsc=${vsc#origin/}; base=${gh:-$vsc}; [ -n "$base" ] && echo "$base" || (gh repo view --json defaultBranchRef --jq '.defaultBranchRef.name' 2>/dev/null || git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's|refs/remotes/origin/||')
- æ¢ã«ã³ãããæžã¿ã§ãã®PRã«å
¥ãã³ãããéå (base..HEAD): !
b=$(git branch --show-current); gh=$(git config branch."$b".github-pr-base-branch 2>/dev/null); gh=${gh##*#}; vsc=$(git config branch."$b".vscode-merge-base 2>/dev/null); vsc=${vsc#origin/}; base=${gh:-$vsc}; [ -z "$base" ] && base=$(gh repo view --json defaultBranchRef --jq '.defaultBranchRef.name' 2>/dev/null || git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's|refs/remotes/origin/||'); (git log origin/"$base"..HEAD --oneline 2>/dev/null || git log "$base"..HEAD --oneline 2>/dev/null) | sed 's/^/ /'; echo "(âããã¯èµ·åæç¹ã®ã¹ãããã·ã§ãããæé 2ã§ /commit ãäœãæ°èŠã³ãããã¯ãŸã å«ãŸããªã)"
- æ¢åPR (current branch): !
b=$(git branch --show-current); gh pr list --state open --head "$b" --json number,url,title,body --jq 'if length>0 then .[0] | "#\(.number) \(.url)\nTITLE: \(.title)\nBODY:\n\(.body)" else "(ãªã â æ°èŠäœæãã)" end' 2>/dev/null || echo "(ãªã â æ°èŠäœæãã)"
- æ¢åPRã®åäžæ§ãã§ãã¯ïŒå
é ã³ããããããŒã«ã«å±¥æŽã«ååšãããïŒ: !
b=$(git branch --show-current); n=$(gh pr list --state open --head "$b" --json number --jq '.[0].number' 2>/dev/null); if [ -z "$n" ]; then echo "(æ¢åPRãªã â ãã§ãã¯äžèŠ)"; else first=$(gh pr view "$n" --json commits --jq '.commits[0].oid' 2>/dev/null); if [ -z "$first" ]; then echo "(ã³ãããæ
å ±ååŸå€±æ)"; elif git cat-file -e "$first" 2>/dev/null; then echo "OK: PR #$n ã®å
é ã³ããã($first)ã¯ããŒã«ã«å±¥æŽã«ååšãã â åäžãã©ã³ãã®ç¶ã"; else echo "èŠå: PR #$n ã®å
é ã³ããã($first)ãããŒã«ã«å±¥æŽã«ååšããªã â ãã©ã³ãåãåãã ãã®å¥ä»¶PRã®å¯èœæ§ãé«ãã宿ã«äžæžãæŽæ°ããªã"; fi; fi
ããªãã®ã¿ã¹ã¯
äžèšã®å€æŽå
容ã«åºã¥ããŠ:
-
ããã©ã«ããã©ã³ãã«ããå Žåã¯æ°ãããã©ã³ããäœæããïŒãã©ã³ãåã¯å€æŽå
容ããçŽæçã«ä»ãããäŸ: feat/add-login-pageãfix/null-pointer-errorïŒ
-
æªã³ãããã®å€æŽãããå Žåã¯ã/commit ã¹ãã«ïŒSkill ããŒã«ïŒãåŒã³åºããŠã³ããããäœæãããã³ãããã¡ãã»ãŒãžã®åœ¢åŒã»ç²åºŠåå²ã»body ã®ã«ãŒã«ã¯ commit ã¹ãã«ã«å§ãããæªpushã³ãããã®ã¿ã§æªã³ããã倿Žããªãå Žåã¯ãã®æé ãã¹ããããã
éèŠ: /commit ã¯ãã³ãããã ãããæ
åœããç¬ç«ããã¹ãã«ãªã®ã§ãåŒã³åºããè¿ã£ãŠããæç¹ã§ã¯ãã³ãããå®äºããšããäžåºåãã«èŠãããã ãããã¯ãã®ã¿ã¹ã¯å
šäœã®äžéå°ç¹ã«éããªãã/commit ããå¶åŸ¡ãæ»ã£ãããããã§æ¢ãŸããå¿
ãæé 3ïŒpushïŒä»¥éãžç¶ãããã³ãããã ãããŠå®äºã¬ããŒããåºããŠçµäºããã®ã¯èª€ãã§ãããããã®ã¹ãã«ã§æãèµ·ãããã倱æããã³ããããçµãã£ããã¯ãã¿ã¹ã¯ãçµãã£ããã§ã¯ãªãã
-
ãã©ã³ããoriginã«ããã·ã¥ãã
-
ãã«ãªã¯ãšã¹ãã®ã¿ã€ãã«ã𿬿ãçšæããäžèš "æ¢åPR" ã®æç¡ã«å¿ããŠæ°èŠäœæãŸãã¯æŽæ°ããã
æ¢åPRã®æç¡ã»åäžæ§ã®å€å®ã¯ãContext ã® "æ¢åPR" ããã³ "æ¢åPRã®åäžæ§ãã§ãã¯" ã®å€ã®ã¿ãæ£ãšããã gh pr viewïŒåŒæ°ãªãïŒã gh pr listïŒ--state open ãä»ããªã圢ïŒãªã©ã§æ¢åPRãç¬èªã«æ¢ãçŽããŠã¯ãããªããããã㯠close/merge æžã¿ã®PRãŸã§ã«ã¬ã³ããã©ã³ããã解決ããŠããŸãããã©ã³ãåã䜿ãåãããšãã«ç¡é¢ä¿ãªéå»ã®PRã誀ã£ãŠæŽãåå ã«ãªãïŒå®éã«ãã®èª€ãã§ããŒãžæžã¿PRã®ã¿ã€ãã«/æ¬æãäžæžãããäºæ
ãèµ·ããïŒãæ¢åPRã®çªå·ã»URLã»çŸè¡ã¿ã€ãã«/æ¬æãå¿
èŠãªå ŽåããContext ã«åºãŠããå€ããã®ãŸãŸäœ¿ãã
ãŸããPRã«å«ããã³ãããéåãš diff ããã®æç¹ã§ååŸãçŽãã<base> ã Context ã® "PR base branch" ã®å€ãšããŠ:
- ã³ãããéå:
git log origin/<base>..HEAD --oneline 2>/dev/null || git log <base>..HEAD --oneline
- diff:
git diff origin/<base>..HEAD 2>/dev/null || git diff <base>..HEAD
ãªãåãçŽãã®ã: Context ã® "ã³ãããéå (base..HEAD)" ã git status ã¯ã¹ãã«èµ·åæç¹ã®ã¹ãããã·ã§ããã«éãããæé 2ã§ /commit ãæ°ããäœã£ãã³ãããã¯ãŸã å«ãŸããŠããªããPRã®ã¿ã€ãã«/æ¬æã¯ããã®PRã base ã«å¯ŸããŠå ãã倿Žã®å
šäœãã衚ããã®ãªã®ã§ã/commit åŸã®ææ°ç¶æ
ãåæ ãã base..HEAD ãå¿
ãããã§åãçŽãå¿
èŠãããã
ã¿ã€ãã«/æ¬æã®å¯äžã®å
¥åã¯ãããã§ååŸãã base..HEAD ã®ã³ãããéåãš diff ã§ããã Context ã® git statusïŒïŒæåŸã®æªã³ããã倿Žã ãïŒããæ¢åPRã®çŸè¡æ¬æãã¿ã€ãã«/æ¬æã®å
¥åã«ããŠã¯ãããªãããããã¯å
šäœåã®äžéšã§ãããªããããã«åŒã£åŒµããããšå
è¡ã³ãããã®å
å®¹ãæŒããã
ã¿ã€ãã«/æ¬æã®çæã«ãŒã«ïŒæ°èŠã»æŽæ°ã§å
±éïŒ:
- ã¿ã€ãã«: äžèšã§ååŸããã³ãããéåã®å
容å
šäœãèŠçŽããConventional Commits圢åŒïŒ
type: subjectïŒã«ããã
- æ¬æ: äžèšã§ååŸããã³ãããéåãš diff ãåç
§ããŠãå
šã³ãããã®å€æŽå
å®¹ãæŒããªããŸãšããïŒç®æ¡æžã1ã3è¡çšåºŠïŒãæ¬æã¯å
šäœãåçæããïŒæ¢åæ¬æãžã®ããŒãžã¯ããªãïŒã
- èšèª: PRã¿ã€ãã«ããã³æ¬æã®èšèªã¯ãPRã«å«ãŸããã³ãããã¡ãã»ãŒãžã®èšèªã«æããïŒæªã³ããã倿Žããã
/commit ã¹ãã«ãåŒã³åºããå Žåã¯ããã®ã¹ãã«ãçæããã³ãããã¡ãã»ãŒãžã®èšèªãåç
§ããïŒã
- ã»ã«ããã§ãã¯: æç€ºã»äœæããåã«ãååŸããã³ãããéåã®ä»¶æ°ã確èªããã2件以äžãªããã¿ã€ãã«/æ¬æããã®å
šä»¶ãã«ããŒããŠãããïŒæåŸã®1ä»¶ã ãã®å
容ã«ãªã£ãŠããªããïŒãå¿
ã確ããããã«ããŒã§ããŠããªããã°æžãçŽãã
å®äºã¬ããŒãã®ãã©ãŒããã
ãã¹ãŠã® git/gh æäœïŒpushã»PRäœæ/æŽæ°ãå«ãïŒãå®äºããããšãæåŸã«ç°¡æœãªå®äºã¬ããŒãã1åã ãéããŸããã³ãããçŽåŸã®ãã³ãããå®äºããŸãããçãªã¡ãã»ãŒãžã¯å®äºã¬ããŒãã§ã¯ãããŸãããå®äºã¬ããŒã㯠push ãš PR ãŸã§çµããŠåããŠåºãå¯äžã®ã¡ãã»ãŒãžã§ããã³ãããã ãæžãã æ®µéã§ãã®ã¬ããŒãïŒãé¡äŒŒã®å®äºã¡ãã»ãŒãžïŒãéã£ãŠã¿ãŒã³ãçµããŠã¯ãããŸããã
- PR URL ã¯åç¬ã§é
眮ããçŽåŸã«ããã¹ãïŒå
šè§æ¬åŒ§ã»ã¹ããŒã¹åºåãã®æ³šèšãªã©ïŒãé£çµããªãã§ãã ããã URL ã®çŽåŸã«æåãç¶ããšãã¿ãŒããã«ã® Markdown ã¬ã³ãã©ãŒã
pull/790ïŒbase... ãŸã§ã URL ã®äžéšãšããŠåã蟌ã¿ããªã³ã¯ãå£ããŸããbase ãã©ã³ããªã©ã®è£è¶³æ
å ±ã¯ URL ãšã¯å¥ã®ç®æ¡æžãïŒå¥è¡ïŒã«åããŸãã
- URL ã¯çŽ ã® URL ã®ãŸãŸèšèŒããŸãïŒèªåãªã³ã¯åãããïŒãMarkdown ãªã³ã¯èšæ³
[text](url) ã§ã©ããããå Žåããããã¹ããš URL ãæ£ããåé¢ããŠãã ããã
- ãã®ä»ã®è£è¶³æ
å ±ïŒèªåã¯ããŒãºããã issue çªå·ãªã©ïŒã¯ã¬ããŒãã«å«ããŸããã
ãã©ãŒãããïŒæå°éïŒãbase è¡ã¯ããã©ã«ããã©ã³ããšç°ãªãå Žåã®ã¿åºããŸããã³ããããè€æ°ããå Žåã¯ç®æ¡æžãã§åæããŸããPRè¡ã¯ç¶æ
ã«å¿ããŠåºãåããŸãïŒæ°èŠäœæã»æ¢åæŽæ°ã»æ¢å倿ŽãªãïŒ:
å®äºããŸããã
- ã³ããã:
- <ççž®SHA> <ä»¶å>
- <ççž®SHA> <ä»¶å>
- PR (æ°èŠ): <PR URL>
- base: <base ãã©ã³ã>
PRè¡ã®åºãåã:
- æ°èŠäœæ:
- PR (æ°èŠ): <PR URL>
- æ¢åæŽæ°:
- PR (æŽæ°): <PR URL>ïŒå¿
èŠãªãæŽæ°ç®æã1èªæ·»ãã: ã¿ã€ãã«/æ¬æ/äž¡æ¹ïŒ
- æ¢åã»å€æŽãªã:
- PR (倿Žãªã): <PR URL>
ã³ãããã1ä»¶ã®ã¿ã®å Žåã¯1è¡ã«ãŸãšããŠããïŒ- ã³ããã: <ççž®SHA> <ä»¶å>ïŒã