|
1 | 1 | --- |
2 | | -description: 发起 PR - 格式化代码并提交 PR |
| 2 | +description: 提交 PR - 自动识别新建或追加提交 |
3 | 3 | --- |
4 | 4 |
|
5 | | -# 发起 PR 流程 |
| 5 | +# 提交 PR |
6 | 6 |
|
7 | | -严格按以下步骤顺序执行: |
| 7 | +严格按以下步骤顺序执行。 |
8 | 8 |
|
9 | 9 | --- |
10 | 10 |
|
11 | | -## 步骤 1:确定提交范围 |
| 11 | +## 前置检查 |
| 12 | + |
| 13 | +### 检查是否已有开启的 PR |
12 | 14 |
|
13 | 15 | ```bash |
14 | | -git diff --cached --stat |
15 | | -git diff --stat |
| 16 | +git branch --show-current |
| 17 | +gh pr list --head "$(git branch --show-current)" --state open --json number,url |
16 | 18 | ``` |
17 | 19 |
|
18 | | -根据暂存区和工作区状态判断: |
| 20 | +根据结果选择模式: |
| 21 | + |
| 22 | +| 当前分支 | 已有开启的 PR | 模式 | |
| 23 | +|----------|---------------|------| |
| 24 | +| main | - | **新建模式** | |
| 25 | +| 非 main | 有 | **追加模式** | |
| 26 | +| 非 main | 无 | **新建模式** | |
| 27 | + |
| 28 | +--- |
19 | 29 |
|
20 | | -| 暂存区 | 工作区 | 处理方式 | 是否需要确认 | |
21 | | -|--------|--------|----------|--------------| |
22 | | -| 有内容 | 有内容 | 询问用户:只提交暂存区内容,还是提交全部变更 | **需要确认** | |
23 | | -| 有内容 | 无内容 | 直接使用暂存区内容 | 无需确认 | |
24 | | -| 无内容 | 有内容 | 使用 `git add .` 添加全部变更 | 无需确认 | |
25 | | -| 无内容 | 无内容 | 提示无变更可提交,终止流程 | - | |
| 30 | +## 第一步:确定提交范围 |
26 | 31 |
|
27 | | -记录本步骤确定的提交范围(全部变更 / 仅暂存区)和暂存区涉及的文件列表。 |
| 32 | +运行 `git status --porcelain`: |
| 33 | +- 若无输出:提示无变更,终止流程 |
| 34 | +- 若暂存区有内容,且工作区也有内容(含未跟踪文件):询问用户选择局部提交或全部提交 |
| 35 | +- 否则:全部提交(执行 `git add .`) |
| 36 | + |
| 37 | +**判断方法**:第一列非空格为暂存区有内容;第二列非空格或以 `??` 开头为工作区有内容。 |
| 38 | + |
| 39 | +若为**局部提交**,记录**暂存区文件列表**供后续步骤使用。 |
28 | 40 |
|
29 | 41 | --- |
30 | 42 |
|
31 | | -## 步骤 2:格式化代码 |
| 43 | +## 第二步:格式化代码 |
32 | 44 |
|
33 | 45 | ```bash |
34 | 46 | ./codeformat.sh |
35 | 47 | ``` |
36 | 48 |
|
37 | 49 | 忽略输出的报错信息,只要运行就会完成格式化。 |
38 | 50 |
|
39 | | -格式化后处理: |
40 | | -- 如果步骤 1 确定提交**全部变更**:执行 `git add .` |
41 | | -- 如果步骤 1 确定只提交**暂存区内容**:检查格式化产生的变更,将步骤 1 记录的暂存区文件相关的格式化修改加入暂存区(`git add {文件}`) |
| 51 | +格式化后根据第一步确定的提交范围处理: |
| 52 | + |
| 53 | +| 提交范围 | 处理方式 | |
| 54 | +|----------|----------| |
| 55 | +| 全部提交 | 执行 `git add .` 将所有变更(包括格式化修改)加入暂存区 | |
| 56 | +| 局部提交 | 检查第一步记录的暂存区文件是否被格式化修改,如有则重新加入暂存区(`git add {文件}`),忽略其他文件的格式化修改 | |
42 | 57 |
|
43 | 58 | --- |
44 | 59 |
|
45 | | -## 步骤 3:生成 PR 信息并创建 PR |
| 60 | +## 第三步:生成提交信息 |
| 61 | + |
| 62 | +查看将要提交的内容: |
| 63 | + |
| 64 | +```bash |
| 65 | +git diff --cached |
| 66 | +``` |
| 67 | + |
| 68 | +根据变更内容生成**Commit 信息**(英语,120 字符内,以句号结尾,侧重描述用户可感知的变化)。 |
| 69 | + |
| 70 | +--- |
46 | 71 |
|
47 | | -用 `git status`、`git diff --cached` 查看将要提交的内容,生成以下信息: |
| 72 | +## 第四步:提交并推送 |
| 73 | + |
| 74 | +**直接执行,无需确认。** |
| 75 | + |
| 76 | +### 追加模式 |
| 77 | + |
| 78 | +```bash |
| 79 | +git commit -m "{Commit 信息}" |
| 80 | +git push |
| 81 | +``` |
| 82 | + |
| 83 | +输出: |
| 84 | + |
| 85 | +``` |
| 86 | +**Commit**:{Commit 信息} |
| 87 | +
|
| 88 | +**PR 链接**:{PR 链接}(已追加提交) |
| 89 | +``` |
| 90 | + |
| 91 | +### 新建模式 |
| 92 | + |
| 93 | +生成以下信息: |
48 | 94 |
|
49 | 95 | - **分支名称**:`feature/{username}_模块名` 或 `bugfix/{username}_模块名`(`{username}` 为 GitHub 用户 ID 全小写,模块名用下划线连接,最多两个单词) |
50 | | -- **PR 标题**:英语,120 字符内,以句号结尾,侧重描述用户可感知的变化 |
51 | 96 | - **PR 描述**:中文,简要说明变更内容和目的 |
52 | 97 |
|
53 | | -**直接执行以下命令创建 PR,无需等待用户确认:** |
54 | | - |
55 | 98 | ```bash |
56 | 99 | git checkout -b {分支名称} |
57 | | -git commit -m "{PR标题}" |
| 100 | +git commit -m "{Commit 信息}" |
58 | 101 | git push -u origin {分支名称} |
59 | | -gh pr create --title "{PR标题}" --body "{PR描述}" |
| 102 | +gh pr create --title "{Commit 信息}" --body "{PR 描述}" |
60 | 103 | ``` |
61 | 104 |
|
62 | | -完成后输出以下信息: |
| 105 | +输出: |
63 | 106 |
|
64 | 107 | ``` |
65 | | -**PR 标题**:{PR标题} |
| 108 | +**PR 标题**:{Commit 信息} |
66 | 109 |
|
67 | | -**PR 描述**:{PR描述} |
| 110 | +**PR 描述**:{PR 描述} |
68 | 111 |
|
69 | | -**PR 链接**:{PR链接} |
| 112 | +**PR 链接**:{PR 链接}(新建) |
70 | 113 | ``` |
71 | 114 |
|
72 | 115 | --- |
73 | 116 |
|
74 | | -## 重要限制 |
| 117 | +## **!! IMPORTANT - 重要限制** |
75 | 118 |
|
76 | | -- **禁止**在 main 分支直接提交推送代码 |
77 | | -- **禁止** force push |
| 119 | +- **NEVER** 执行 force push |
0 commit comments