Commit, Push & PR Workflow
Applies to this repo's conventions:
Do not commit directly to main; use a feature branch and a PR. PR/issue titles: English. PR bodies/comments: Simplified Chinese by default (unless the request starts with [EN]). Avoid GitHub CLI --body with escaped newlines; prefer --body-file or stdin to prevent literal \n.
This skill is written to work well on Windows (PowerShell 5.1+). Bash examples are optional.
Branch Create a feature branch from main before making changes: git fetch origin --prune git switch main git pull --ff-only git switch -c docs/example-change Commit Confirm required checks have run for the current change scope before committing (record the exact commands). Stage intended files only (prefer git add -p). Write commit messages using a file (avoid multi--m formatting pitfalls). Commit title: prefix: subject or prefix(scope): subject, English only, ideally <= 50 chars (hard wrap <= 72), no trailing period. Include a body for non-trivial changes: blank line after title, wrap at 72 columns, include risk/verification notes. Template (PowerShell, UTF-8 without BOM) $msg = @' fix(scope): concise subject
What changed, why, how (if relevant). Wrap at 72 columns. Risks/side effects if any. '@
$path = Join-Path $env:TEMP 'commit_msg.txt'
git commit -F $path Remove-Item -Force $path
Template (Bash, optional) cat <<'EOF' > /tmp/commit_msg.txt fix(scope): concise subject
What changed, why, how (if relevant). Wrap at 72 columns. Risks/side effects if any. EOF
git commit -F /tmp/commit_msg.txt rm -f /tmp/commit_msg.txt
Push
Push only after checks pass.
Prefer git push -u origin
@' Summary: - ...
Verification: - ... '@ | gh pr create --draft --base main --title "docs: ..." --body-file -
Option B: Browser (no extra tools)
Push the branch, then open:
https://github.com/
$payload = @{
title = 'docs: ...'
head = '
Verification: - ... "@ draft = $true } | ConvertTo-Json
$bytes = [System.Text.Encoding]::UTF8.GetBytes($payload)
Invoke-RestMethod -Method Post -Uri 'https://api.github.com/repos/<owner>/<repo>/pulls'
-Headers $headers -ContentType 'application/json; charset=utf-8'
-Body $bytes
Option D: GitHub API via git credential (PowerShell, no env token)
If gh is not installed and you do not have GITHUB_TOKEN set, you can reuse the GitHub credential that git already has:
$cred = "protocol=httpsnhost=github.comn`n" | git credential fill
$token = (($cred | Select-String -Pattern '^password=').Line).Substring(9)
$headers = @{ Authorization = "token $token" 'User-Agent' = 'codex-cli' Accept = 'application/vnd.github+json' }
$payloadObj = @{
title = 'docs: ...'
head = 'n- ...n"
draft = $true
}
$json = $payloadObj | ConvertTo-Json -Depth 5 $bytes = [System.Text.Encoding]::UTF8.GetBytes($json)
Invoke-RestMethod -Method Post -Uri 'https://api.github.com/repos/<owner>/<repo>/pulls'
-Headers $headers -ContentType 'application/json; charset=utf-8'
-Body $bytes
If editing PR bodies via GitHub API from PowerShell:
Serialize JSON as UTF-8 bytes (no BOM) to preserve Chinese text reliably. Avoid printing tokens or Authorization headers.