ship-it
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseAfter-Goal: 代码提交、PR 合入、Issue 关闭工作流(GitHub)
目标完成后:代码提交、PR合入、Issue关闭工作流(GitHub)
完成 GitHub Issue 实现后的标准收尾流程:提交代码 → 推送分支 → 创建 PR → 合入 → 关闭 Issue。
完成GitHub Issue实现后的标准收尾流程:提交代码 → 推送分支 → 创建PR → 合入 → 关闭Issue。
前置条件
前置条件
- 当前 git 仓库有已实现的代码变更
- 已知 Issue 编号(如 )
#42 - gh CLI 已登录(可验证)
gh auth status
- 当前git仓库有已实现的代码变更
- 已知Issue编号(如 )
#42 - gh CLI已登录(可验证)
gh auth status
工作流
工作流
Step 1: 提交代码
Step 1: 提交代码
bash
undefinedbash
undefined1a. 检查变更状态
1a. 检查变更状态
git status
git diff --stat HEAD
git status
git diff --stat HEAD
1b. 暂存本次 Issue 相关的文件(不要 add 不相关的文件)
1b. 暂存本次Issue相关的文件(不要add不相关的文件)
git add <files related to this issue>
git add <files related to this issue>
1c. 提交,commit message 关联 Issue
1c. 提交,commit message关联Issue
git commit -m "$(cat <<'EOF'
{简要描述} (#issue-number)
{可选的详细说明}
EOF
)"
**关键规则:**
- commit message 中包含 `#issue-number` 以关联 Issue
- 只暂存当前 Issue 相关的文件,不要混入其他变更git commit -m "$(cat <<'EOF'
{简要描述} (#issue-number)
{可选的详细说明}
EOF
)"
**关键规则:**
- commit message中包含`#issue-number`以关联Issue
- 只暂存当前Issue相关的文件,不要混入其他变更Step 2: 推送分支
Step 2: 推送分支
bash
undefinedbash
undefined如果还在 main/master 上,先创建功能分支
如果还在main/master上,先创建功能分支
git checkout -b {branch-name} # 如已在功能分支则跳过
git checkout -b {branch-name} # 如已在功能分支则跳过
推送到远程
推送到远程
git push -u origin {branch-name}
分支命名建议:`feat/issue-42-short-desc` 或 `fix/issue-42-short-desc`git push -u origin {branch-name}
分支命名建议:`feat/issue-42-short-desc`或`fix/issue-42-short-desc`Step 3: 创建 PR
Step 3: 创建PR
bash
gh pr create \
--title "{简要描述}" \
--body "$(cat <<'EOF'bash
gh pr create \
--title "{简要描述}" \
--body "$(cat <<'EOF'Summary
Summary
- 实现内容概述
Closes #{issue-number}
- 实现内容概述
Closes #{issue-number}
Test plan
Test plan
- 测试项 1
- 测试项 2 EOF )"
**关键规则:**
- PR body 中写 `Closes #N` 或 `Fixes #N`,合入后 GitHub 自动关闭 Issue
- title 简洁,不超过 70 字符- 测试项1
- 测试项2 EOF )"
**关键规则:**
- PR body中写`Closes #N`或`Fixes #N`,合入后GitHub自动关闭Issue
- title简洁,不超过70字符Step 4: 合入 PR
Step 4: 合入PR
bash
undefinedbash
undefined4a. 查看 PR 状态(确认 checks 通过)
4a. 查看PR状态(确认checks通过)
gh pr checks
gh pr checks
4b. 合入(默认 merge commit,可选 --squash 或 --rebase)
4b. 合入(默认merge commit,可选--squash或--rebase)
gh pr merge --squash --delete-branch
**参数说明:**
- `--squash`: 压缩为单个 commit 合入(推荐)
- `--rebase`: rebase 合入
- `--merge`: 普通 merge commit
- `--delete-branch`: 合入后删除远程分支gh pr merge --squash --delete-branch
**参数说明:**
- `--squash`: 压缩为单个commit合入(推荐)
- `--rebase`: rebase合入
- `--merge`: 普通merge commit
- `--delete-branch`: 合入后删除远程分支Step 5: 关闭 Issue(如未自动关闭)
Step 5: 关闭Issue(如未自动关闭)
如果 PR body 中已写 ,合入后 Issue 会自动关闭。否则手动关闭:
Closes #Nbash
undefined如果PR body中已写,合入后Issue会自动关闭。否则手动关闭:
Closes #Nbash
undefined5a. 添加完成评论
5a. 添加完成评论
gh issue comment {issue-number} --body "$(cat <<'EOF'
gh issue comment {issue-number} --body "$(cat <<'EOF'
实现总结
实现总结
- 核心变更:说明
- PR: #{pr-number} EOF )"
- 核心变更:说明
- PR: #{pr-number} EOF )"
5b. 关闭 Issue
5b. 关闭Issue
gh issue close {issue-number} --reason completed
undefinedgh issue close {issue-number} --reason completed
undefined错误处理
错误处理
| 场景 | 处理方式 |
|---|---|
| 查看失败原因,修复后追加 commit 推送 |
| PR 有 merge conflict | |
| 确认 required reviews 已满足,或请 reviewer approve |
| Issue 合入后未自动关闭 | 确认 PR body 包含 |
| 场景 | 处理方式 |
|---|---|
| 查看失败原因,修复后追加commit推送 |
| PR有merge conflict | |
| 确认required reviews已满足,或请reviewer approve |
| Issue合入后未自动关闭 | 确认PR body包含 |
完整示例
完整示例
bash
undefinedbash
undefined创建分支并提交
创建分支并提交
git checkout -b feat/issue-42-case-model
git add cases/case.go cases/case_test.go
git commit -m "$(cat <<'EOF'
Add Case data model and Markdown read/write (#42)
Define Case struct with YAML frontmatter + Markdown body
serialization. Provide WriteCase/ReadCase/ListCases/UpdateCase.
EOF
)"
git checkout -b feat/issue-42-case-model
git add cases/case.go cases/case_test.go
git commit -m "$(cat <<'EOF'
Add Case data model and Markdown read/write (#42)
Define Case struct with YAML frontmatter + Markdown body
serialization. Provide WriteCase/ReadCase/ListCases/UpdateCase.
EOF
)"
推送
推送
git push -u origin feat/issue-42-case-model
git push -u origin feat/issue-42-case-model
创建 PR
创建PR
gh pr create
--title "Add Case data model and Markdown read/write"
--body "$(cat <<'EOF'
--title "Add Case data model and Markdown read/write"
--body "$(cat <<'EOF'
gh pr create
--title "Add Case data model and Markdown read/write"
--body "$(cat <<'EOF'
--title "Add Case data model and Markdown read/write"
--body "$(cat <<'EOF'
Summary
Summary
- Define Case struct with YAML frontmatter + Markdown body
- Implement WriteCase/ReadCase/ListCases/UpdateCase functions
- Add comprehensive test coverage
Closes #42
- Define Case struct with YAML frontmatter + Markdown body
- Implement WriteCase/ReadCase/ListCases/UpdateCase functions
- Add comprehensive test coverage
Closes #42
Test plan
Test plan
- Unit tests pass
- go vet / lint clean EOF )"
- Unit tests pass
- go vet / lint clean EOF )"
确认 checks 通过后合入
确认checks通过后合入
gh pr checks
gh pr merge --squash --delete-branch
gh pr checks
gh pr merge --squash --delete-branch
切回主分支
切回主分支
git checkout main
git pull
undefinedgit checkout main
git pull
undefined