con un clic
commit-push-pr
Commit, push, and create or update a PR
Instalar con Codex o Claude Copia este prompt, pégalo en Codex, Claude u otro asistente, y deja que revise la página de la skill y la instale por ti.
Menú
Commit, push, and create or update a PR
Instalar con Codex o Claude Copia este prompt, pégalo en Codex, Claude u otro asistente, y deja que revise la página de la skill y la instale por ti.
Basado en la clasificación ocupacional SOC
GitHub PRã®ã¬ãã¥ãŒã³ã¡ã³ãã®ãã¡ãHideã»è§£æ±ºæžã¿ã§ãªããã®ã ããæœåºããŠå¯Ÿå¿ããã
GitHub Actions ã® CI 倱æãã倱æãžã§ãã®ç¹å® â ãã°ããã®åå æœåº â åå åé¡ â ããŒã«ã«åçŸ â ä¿®æ£ â æ€èšŒãŸã§äœç³»çã«é²ããã¹ãã«ãç¹ã«ã倱æãã°ã®ãã€ãºã«åãããŠåå ãèŠããªããšããç°å¢äŸåã§ãã¬ãŒããŒã«èœã¡ãŠãããšãã«åœ¹ç«ã€ãä¿®æ£ã«äººã®å€æãå¿ èŠãªå Žåã¯ã察話ã¢ãŒãã§ã¯ç¢ºèªããŠäžæãã--non-interactive æå®æã¯PRã«ã³ã¡ã³ããæçš¿ããŠäžæããã
`bundle exec erblint app` ã®æ¢åéåããã¡ã€ã«åäœã§ç¡å¹åãã todo ãã¡ã€ã«çŸ€ ïŒ`.erb_lint_todo.yml` / `.erb-lint-rubocop-todo.yml`ïŒãçæã»åæåããæé ãæåèµ·åå°çš ïŒ`/erblint-todo-init`ïŒãtodo ãäœãçŽããããšããªã©ãäžåæ§ã®ã»ããã¢ããäœæ¥ã§ã®ã¿äœ¿ãã rubocop åäœã»haml-lintã»herb-lint ã®éçšã«ã¯äœ¿ããªãã
ãã©ã³ã¢ãŒãã§äœæãããã©ã³ãã¡ã€ã«ïŒMarkdownïŒã®å å®¹ã«æ²¿ã£ãŠå®è£ ãè¡ããå®è£ ãã§ãŒãºã軜éãªsonnetã¢ãã«ã§å®è¡ããã³ã¹ãã»é床ãæé©åãããåŒæ°ã§ãã©ã³ãã¡ã€ã«ã®ãã¹ãæå®ã§ãããçç¥æã¯çŽè¿ã®ã»ãã·ã§ã³ãã°ãã察象ãã©ã³ãèªåç¹å®ããŠãŠãŒã¶ãŒã«ç¢ºèªãããã³ãããã»pushã»PRäœæã¯ããã©ã³ã«æèšãããŠããå Žåã®ã¿å®æœããã
APM ããã±ãŒãžç±æ¥ã«ãŒã«ïŒ.claude/rules/*.mdïŒãšéè€ãããããžã§ã¯ãåºæããŒã«ã«ã«ãŒã« ïŒ.apm/instructions/*.local.instructions.mdïŒãæ€åºããããŒã«ã«åŽãåé€ã»çž®å°ãããæªç®¡çã«ãŒã«ã® æ°èŠç§»è¡ã¯è¡ããªãïŒãã㯠migrate-rules-to-apm ã®åœ¹å²ïŒãæåå®è¡å°çšïŒèªåããªã¬ãŒããªãïŒã
APMæªç®¡çã® .claude/rules ã«ãŒã«ïŒæåé 眮ã»ã¬ã¬ã·ãŒãª local/ ãµããã£ã¬ã¯ããªé 眮ïŒããã³ ã«ãŒãã® CLAUDE.md ã .apm/instructions/*.local.instructions.md ã«äžæ¬ç§»è¡ããã¹ãã«ã@åç §ã¯ å±éããŠæ¬æã«åã蟌ã¿ãåç §å ãã¡ã€ã«ã¯ä»ããã®åç §ããªããã°åé€ãããæåå®è¡å°çšïŒèªåããªã¬ãŒããªãïŒã
| 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 |
git statusgit branch --show-currentb=$(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/||')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 ãäœãæ°èŠã³ãããã¯ãŸã å«ãŸããªã)"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 "(ãªã â æ°èŠäœæãã)"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 --onelinegit 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ã®çŸè¡æ¬æãã¿ã€ãã«/æ¬æã®å
¥åã«ããŠã¯ãããªãããããã¯å
šäœåã®äžéšã§ãããªããããã«åŒã£åŒµããããšå
è¡ã³ãããã®å
å®¹ãæŒããã
ã¿ã€ãã«/æ¬æã®çæã«ãŒã«ïŒæ°èŠã»æŽæ°ã§å ±éïŒ:
type: subjectïŒã«ããã/commit ã¹ãã«ãåŒã³åºããå Žåã¯ããã®ã¹ãã«ãçæããã³ãããã¡ãã»ãŒãžã®èšèªãåç
§ããïŒãæ¢åPRããªãå ŽåïŒ"æ¢åPR" ãããªããïŒ: gh pr create ã§æ°èŠäœæããã--base ã«ã¯äžèš "PR base branch" ã®å€ã䜿ããããã¯èšé²æžã¿ã®åå²å
ãå°éãããããããã©ã«ããã©ã³ããšã¯éããªãïŒstacked PR ã«å¯Ÿå¿ããããïŒã
æ¢åPRãããå ŽåïŒ"æ¢åPR" ã«çªå·ã»URLãåºãŠããïŒ: ãŸã Context ã®ãæ¢åPRã®åäžæ§ãã§ãã¯ãã®çµæã確èªããã
gh pr edit ã«ããã¿ã€ãã«/æ¬æã®äžæžãã¯è¡ããªããæé 3ã®pushã¯ãã®æžå¿µãšç¡é¢ä¿ãªã®ã§éåžžéãé²ããŠãããpushåŸããŠãŒã¶ãŒã«ç¶æ³ïŒPRçªå·ã»URLã»çŸåšã®ã¿ã€ãã«ïŒãæç€ºãããpush ã¯å®äºããŸããããPR #<çªå·> ã¯å¥ä»¶ã®å¯èœæ§ãããããæŽæ°ããŠããŸãããæ°èŠPRãäœæããŸããããããšãä»ã®å¯Ÿå¿ãå¿
èŠã§ããããšç¢ºèªãåã£ãŠããæ¬¡ã«é²ãïŒãã®æç€ºã¯æé 4å®äºåã®ç¢ºèªã§ãããå®äºã¬ããŒãã§ã¯ãªãïŒãåçæããã¿ã€ãã«/æ¬æãã"æ¢åPR" ã«åºãŠããçŸåšã® TITLE/BODY ãšæ¯èŒããããã®ãåçæãã®å
¥åãäžèšã®ãšãã base..HEAD ã®å
šã³ãããéåã§ãã£ãŠãæ¢åPRã®çŸè¡æ¬æã§ã¯ãªãïŒæ¢åæ¬æã«ããŒãžããã®ã§ã¯ãªããå
šã³ããããããŒãããŒã¹ã§äœãçŽãïŒã
gh pr edit ãå®è¡ããåã«ãæŽæ°ããã¿ã€ãã«/æ¬æããŠãŒã¶ãŒã«æç€ºããŠæ¿èªãåãã æ¿èªãåŸãŠãããå·®ããããã£ãŒã«ãã®ã¿ gh pr edit --title <...> / --body <...> ã§æŽæ°ããïŒã¿ã€ãã«ã ãéãå Žå㯠--title ã®ã¿ãæ¬æã ãéãå Žå㯠--body ã®ã¿ïŒãæ¿èªãããªããã°æŽæ°ããªããgit status ã«ã¯æåŸã®å€æŽããæ ããªããããã«åŒã£åŒµãããŠãæåŸã®ã³ãããã ããã®ã¿ã€ãã«/æ¬æãäœã£ãŠããŸãã®ãå
žåçãªå€±æïŒPRã®å
è¡ã³ãããå
å®¹ãæ¬æããäžžããšæ¶ããïŒãåçæã®å
¥åã¯å¿
ã base..HEAD ã®å
šã³ãããéåã§ãã£ãŠãContext ã® status ã§ãæ¢åPRæ¬æã§ããªããåã¹ããããé çªã«å®è¡ããŠãã ããã åã¹ãããã®èŠåŠãäºåã«å€æããäžã§èšç»ããéäžã§ç¢ºèªãæãŸãã«é²ããŸããæé 2ãé€ã git/gh ããŒã«åŒã³åºãã¯å¯èœãªéããŸãšããŠå®è¡ããŸãããããã®ããŒã«åŒã³åºãïŒ/commit ã¹ãã«åŒã³åºããå«ãïŒä»¥å€ã®ããã¹ããã¡ãã»ãŒãžãéä¿¡ããªãã§ãã ããããã ãäŸå€ãšããŠãæ¢åPRãæŽæ°ããå ŽåïŒæé 4ã® gh pr editïŒã¯ãå®è¡åã«æŽæ°å
容ãæç€ºããŠãŠãŒã¶ãŒã®æ¿èªãåã£ãŠãã ããã pushã»æ°èŠPRäœæïŒgh pr createïŒã¯åŸæ¥éãç¡ç¢ºèªã§é²ããŸãã
éäžã§åæã«æ¢ãŸããªãããšã ãã®ã¹ãã«ã®ç®ç㯠push ãš PR ãŸã§å®éããããšã«ãããç¹ã«ãæé 2ã§ /commit ãåŒã³åºããå Žåããã®å®äºåŸã«å¿
ãæé 3ïŒpushïŒã»æé 4ïŒPRïŒãŸã§ç¶ããã/commit ã®æ»ããçµç¹ãšèª€èªããŠã³ãããã ãã§çµäºããïŒïŒãã³ãããå®äºããŸããããšã ãè¿ããŠã¿ãŒã³ãçµããïŒã®ã¯ããã®ã¹ãã«ã®æå€§ã®å€±æã¢ãŒãã§ãããæç¢ºãªèª€ããå®äºã¬ããŒããåºããŠããã®ã¯ push ãš PR ãŸã§çµããåŸã ãïŒæé 4ã§æ¢åPRæŽæ°ã®æ¿èªåŸ
ã¡ã«å
¥ãå Žåãé€ãïŒã
ãã¹ãŠã® git/gh æäœïŒpushã»PRäœæ/æŽæ°ãå«ãïŒãå®äºããããšãæåŸã«ç°¡æœãªå®äºã¬ããŒãã1åã ãéããŸããã³ãããçŽåŸã®ãã³ãããå®äºããŸãããçãªã¡ãã»ãŒãžã¯å®äºã¬ããŒãã§ã¯ãããŸãããå®äºã¬ããŒã㯠push ãš PR ãŸã§çµããŠåããŠåºãå¯äžã®ã¡ãã»ãŒãžã§ããã³ãããã ãæžãã æ®µéã§ãã®ã¬ããŒãïŒãé¡äŒŒã®å®äºã¡ãã»ãŒãžïŒãéã£ãŠã¿ãŒã³ãçµããŠã¯ãããŸããã
pull/790ïŒbase... ãŸã§ã URL ã®äžéšãšããŠåã蟌ã¿ããªã³ã¯ãå£ããŸããbase ãã©ã³ããªã©ã®è£è¶³æ
å ±ã¯ URL ãšã¯å¥ã®ç®æ¡æžãïŒå¥è¡ïŒã«åããŸãã[text](url) ã§ã©ããããå Žåããããã¹ããš URL ãæ£ããåé¢ããŠãã ããããã©ãŒãããïŒæå°éïŒãbase è¡ã¯ããã©ã«ããã©ã³ããšç°ãªãå Žåã®ã¿åºããŸããã³ããããè€æ°ããå Žåã¯ç®æ¡æžãã§åæããŸããPRè¡ã¯ç¶æ
ã«å¿ããŠåºãåããŸãïŒæ°èŠäœæã»æ¢åæŽæ°ã»æ¢å倿ŽãªãïŒ:
å®äºããŸããã
- ã³ããã:
- <ççž®SHA> <ä»¶å>
- <ççž®SHA> <ä»¶å>
- PR (æ°èŠ): <PR URL>
- base: <base ãã©ã³ã>
PRè¡ã®åºãåã:
- PR (æ°èŠ): <PR URL>- PR (æŽæ°): <PR URL>ïŒå¿
èŠãªãæŽæ°ç®æã1èªæ·»ãã: ã¿ã€ãã«/æ¬æ/äž¡æ¹ïŒ- PR (倿Žãªã): <PR URL>ã³ãããã1ä»¶ã®ã¿ã®å Žåã¯1è¡ã«ãŸãšããŠããïŒ- ã³ããã: <ççž®SHA> <ä»¶å>ïŒã