外科医生做完一台手术,不会放下手术刀就回家。他必须写一份手术报告:患者为什么进手术室、做了哪些操作、用了什么方案、术后要注意什么。几天后,另一位医生接手时,就靠这份报告在十分钟内读懂一场几小时的手术。没错,PR描述就是开源的“手术报告”——你写完代码,要让千里之外、完全不了解你上下文的维护者,快速读懂你改了什么、为什么改、风险在哪里。一份字段完整、测试说明清晰、带截图证据的PR描述,能把Review往返轮数从五六轮压缩到一两轮;而一份“改了点东西”的模糊描述,会让维护者反复追问,直到双方精疲力竭。本文将从零教你写好PR描述模板,涵盖字段设计、测试说明、附件规范、编写技巧与流程衔接,让每一次提交都成为合并的加速器。

岗位关联

对AI从业者而言,PR描述是参与开源项目的“第一张名片”——一份结构化的清晰描述能显著缩短Review周期,让你的模型代码、工具库贡献更快被维护者接受,这是从技术原型走向生产级工程落地的基本功。

目录
  1. 可视化演示
  2. 模板价值:一份描述,三倍提速
  3. 字段设计:手术报告的固定栏目
  4. 测试说明:术后观察记录怎么填
  5. 附件规范:影像资料的艺术
  6. 编写技巧:文字如手术刀
  7. 流程衔接:从手术台到病房的交接
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

展示PR模板字段设计、测试说明规范与最佳实践,帮助审查者快速理解改动内容与影响范围,缩短Review周期提升合并效率。

本节配有交互动效(进入视口后自动加载,约 3KB)。

模板字段 变更说明/影响范围/关联Issue 结构化模板 降低沟通成本,缩短Review周期50%以上。

模板价值:一份描述,三倍提速

手术报告为什么必须存在?因为一台手术的全部知识只存在于主刀医生的脑子里,不写下来,接手的医生就无法判断病人后续怎么办。代码改动同样如此——如果它只存在于贡献者的本地分支里,维护者就无从判断该不该合并。这也是为什么 PR(Pull Request,拉取请求)描述在开源协作中至关重要:它是附着在代码改动上的“病情说明”。

没有模板时,每个人按自己的习惯写——有人只写一行,有人写五千字流水账。维护者每次都要重新“破译”陌生作者的思维模式,相当于一个新医生每次都要从一篇散文里猜诊断结论。模板的价值就是把它变成“填空”:GitHub、GitLab 支持仓库预设 .github/PULL_REQUEST_TEMPLATE.md,新建 PR 时自动填充栏目,贡献者只需作答:为什么改、改了什么、动了哪里、怎么证明、怎么自查。描述质量的差距最终体现在时间成本上:

就像手术报告上的每一栏都让接诊医生少问一个问题,模板里的每个字段都让维护者少发一条评论——问得少了,合并自然快了。

T=R×(tr+ta)\displaystyle T = R \times (t_r + t_a)
公式通俗说明:T 是 PR 从提交到合并的总耗时,R 是 Review 往返轮数,t_r 是每轮审查者阅读时间,t_a 是每轮作者回应时间。字段越全,三个因子都被压缩。
  1. 往返轮数 RPR 从提交到合并,作者与审查者来回沟通的完整轮数。模板越清晰,疑问越少,R 越小。
    R=⌈N追问K⌉\displaystyle R = \left\lceil \frac{N_{\text{追问}}}{K} \right\rceil
  2. 单轮耗时 (t_r + t_a)每个轮次包含审查者阅读描述与 diff 的时间 t_r,以及作者补测改码的回应时间 t_a。
    tr+ta=t阅读+t回应\displaystyle t_r + t_a = t_{\text{阅读}} + t_{\text{回应}}
  3. 总耗时 T轮数与单轮耗时相乘,任何一个因子增大都会线性拖慢合并节奏。
    T=R×(tr+ta)\displaystyle T = R \times (t_r + t_a)

字段设计:手术报告的固定栏目

手术报告有固定栏目:主诉、诊断、手术方式、出入量、并发症……每个栏目倒逼医生把信息放在该放的位置。如果让医生自由发挥写散文,三天后没人看得懂。PR 模板的字段,就是代码世界的手术报告栏目。

一个经过实践检验的模板通常包含五个核心字段,每个字段回答维护者的一个关键疑问。背景与动机回答“为什么”——这个改动解决什么问题,维护者要先建立“为什么”才能判断“值不值得”;变更内容回答“改了什么”——列出核心模块与文件,而不是逐行贴代码;影响范围回答“风险在哪”——动了哪些模块,是否涉及接口、数据库、迁移脚本;测试说明回答“怎么证明”;自检清单回答“你自查过吗”。把这五栏固定下来,贡献者每次填表相当于一次低成本的自问自答:

描述质量可以量化为各字段完成度的加权和:

栏目固定之后,填表的人不需要纠结“该写什么”,找信息的人不需要纠结“去哪找”——像病历本一样,翻到固定页码就看到了。

S=∑i=15wi×fi×100\displaystyle S = \sum_{i=1}^{5} w_i \times f_i \times 100
公式通俗说明:S 是描述质量分(0~100),w_i 是字段权重,f_i 取值 0 或 1 表示该字段是否填写。背景与变更的权重最高,因为它们是审查决策的核心依据。
  1. 字段完成度 f_i每个模板字段只有“填了(1)”与“没填(0)”两种状态。
    fi∈{0,1}\displaystyle f_i \in \{0, 1\}
  2. 字段权重 w_i不同字段对决策价值不同,背景、变更最重,测试、清单次之。
    w=(0.3,0.3,0.2,0.1,0.1)\displaystyle w = (0.3, 0.3, 0.2, 0.1, 0.1)
  3. 加权求和 S按权重累加并放大到百分制,得分越高,审查者的信任度越高。
    S=0.3f1+0.3f2+0.2f3+0.1f4+0.1f5\displaystyle S = 0.3 f_1 + 0.3 f_2 + 0.2 f_3 + 0.1 f_4 + 0.1 f_5
markdown17 行
## 背景与动机(为什么需要这次改动?解决什么问题?) ## 变更内容(核心改动:新增/修改/删除的模块与文件) ## 影响范围(涉及模块、接口、数据库迁移、外部依赖等) ## 测试说明(测试类型、覆盖场景、验证结果) ## 自检清单- [ ] 通过 lint / 类型检查- [ ] 单元测试全部通过- [ ] 已补充或更新测试用例- [ ] 已核对影响范围与相关文档

测试说明:术后观察记录怎么填

手术报告里的“术后情况”栏,记录患者苏醒、生命体征平稳、转回病房。这些观察数据让接手的医生确信“手术是成功的”。没有这个栏,没人敢对恢复状态打包票。PR 里的测试说明,就是给维护者的“术后观察记录”——你说修复了 bug,空口无凭;你贴上“新增 12 个单测,覆盖加密、解密、异常分支,全部通过”,维护者才敢放行。

一份合格的测试说明至少包含四层信息。测试类型:单元测试、集成测试、端到端测试各覆盖哪一层;覆盖场景:正常路径、异常路径、边界条件各有哪些;验证结果:通过多少、失败多少、在哪个 CI 上运行;边界情况:空值、超长输入、并发竞争等容易被忽视的分支。通过率是维护者看到的第一道数字闸门:

就像术后观察记录让轮班医生三十秒掌握患者状态,一份“类型 + 场景 + 结果 + 边界”的测试说明,让维护者从“半信半疑”变为“可以合并”。

C=NpassedNtotal×100%\displaystyle C = \frac{N_{\text{passed}}}{N_{\text{total}}} \times 100\%
公式通俗说明:C 是测试通过率,N_passed 是通过的用例数,N_total 是相关用例总数。通过率不是 100% 时,必须解释失败原因与影响分析,否则合并会被卡住。
  1. 通过的用例 N_passed本次改动相关且执行通过的测试数量,是可信度的分子。
    Npassed\displaystyle N_{\text{passed}}
  2. 用例总量 N_total包含新增用例和受影响的回归用例,是分母。
    Ntotal=Npassed+Nfailed\displaystyle N_{\text{total}} = N_{\text{passed}} + N_{\text{failed}}
  3. 通过率 C两者相除并转化为百分比,是合并放行的第一道闸门。
    C=NpassedNtotal×100%\displaystyle C = \frac{N_{\text{passed}}}{N_{\text{total}}} \times 100\%

附件规范:影像资料的艺术

影像科医生常说“解剖图比十页文字更直观”。病历里附上 X 光片与 CT 影像,接诊医生一眼看到骨折线在哪。PR 描述里的截图,就是代码世界的 X 光片——尤其对于 UI 改动、样式调整、前端组件改动,一张对比截图胜过千字描述。但截图不是随手丢一张就完事,它有规范。

第一是截图时机:UI 变更必须附截图,纯逻辑改动可不附。第二是前后对比:把“改前”与“改后”并排展示,维护者一眼看出差异。第三是标注重点:用箭头、框线圈出关键区域,避免维护者在图里自己找。第四是格式大小:优先使用平台支持的压缩格式,单图建议不超过 1~2MB,动态交互用 GIF 或录屏链接,注意平台通常限制附件 10MB 以内。截图带来的理解效率提升可以这样衡量:

一张标注清楚重点的前后对比图,等于把 CT 片递给维护者并圈出骨折线——他们不必再自己满片寻找。

E=1−T图T文\displaystyle E = 1 - \frac{T_{\text{图}}}{T_{\text{文}}}
公式通俗说明:E 是“看图相对读文”的时间节省比例。T_图 是看一张标注截图理解改动的时间,T_文 是读文字描述梳理逻辑的时间。一张好截图能大幅降低 T_图,让 E 接近 1。
  1. 读文时间 T_文审查者阅读文字描述、在脑中重建效果的时间成本。
    T文\displaystyle T_{\text{文}}
  2. 看图时间 T_图审查者查看标注截图、直接感知效果的时间成本。
    T图\displaystyle T_{\text{图}}
  3. 节省比例 E1 减去看图与读文的比值,刻画影像资料带来的理解效率提升。
    E=1−T图T文\displaystyle E = 1 - \frac{T_{\text{图}}}{T_{\text{文}}}

编写技巧:文字如手术刀

外科手术报告的语言有苛刻要求:写“切开约 3 厘米,未见粘连”,不写“切了一小段,好像还行”。模糊词是医学报告的天敌,也是 PR 描述的天敌。模板提供框架,但文字质量决定框架的成色。

四个技巧可以立刻用起来。简洁表达:短句 + 列表,一段一意,宁用要点不用散文。数据支撑:用数字替代形容词——“登录耗时从 850ms 降至 320ms”好过“性能大幅提升”。换位思考:审查者不知道你脑内的上下文,把默认知识写出来。精准用词:指明模块名、文件名、方法名,不写“那边那个东西”。这些技巧共同作用,提升的是描述的信息密度:

手术刀讲究快准狠,PR 描述的文字也一样——每句话都要切除病灶,而不是在健康组织上多划一刀。

D=IL\displaystyle D = \frac{I}{L}
公式通俗说明:D 是信息密度,I 是有用信息单元数(模块名、数字、决策点),L 是描述总长度。密度越高,审查者单位时间吸收的有效信息越多。
  1. 信息单元 I每条能帮助审查者做决策的事实,如模块名、量化数据、方案名称。
    I=∑有效信息单元\displaystyle I = \sum \text{有效信息单元}
  2. 文本长度 L描述的总字符数,空话与填充词会拉大分母。
    L=字符总数\displaystyle L = \text{字符总数}
  3. 信息密度 D两者比值,密度低意味着大量“水分”稀释了重点。
    D=IL\displaystyle D = \frac{I}{L}

流程衔接:从手术台到病房的交接

手术做得好,交接也不能马虎。主刀医生要跟病房医生交代术后用药、观察指标、哪天复查。流程衔接是手术成功的最后一公里。PR 描述的最后一公里,是它与提交信息、Issue、Review 周期、合并策略的衔接。

四个方面值得留意。关联 Issue:在描述中写 closes #123,合并时自动关闭对应 Issue,形成从问题到修复的完整闭环。提交规范:采用 Conventional Commits(feat:、fix:、docs:、refactor:),让提交历史可搜索、可回溯。Review 周期:理解维护者的时区与忙闲规律,提交后及时响应追问——每多一轮往返,合并就晚半天。合并效率:维护者天然倾向于“小而清晰”的 PR:描述精准、改动收敛,合并优先级高于大而杂的 PR。这些因素共同决定合并概率:

手术台到病房的交接单上每一项都要打勾,PR 的流程衔接也一样——Issue 闭环、提交规范、响应节奏、合并效率环环相扣,一场好手术才能真正换来“病人康复、代码上线”。

P=11+e−k(S−S0)\displaystyle P = \frac{1}{1 + e^{-k(S - S_0)}}
公式通俗说明:P 是 PR 被快速合并的概率,S 是描述质量分,S_0 是项目质量阈值,k 是敏感度。描述从 50 分提到 80 分,合并概率会显著跃升;从 80 提到 90,边际收益递减。
  1. 质量差 (S - S_0)当前描述得分与项目阈值的差距,越高于阈值越有利。
    S−S0\displaystyle S - S_0
  2. 敏感度 k控制质量分对合并概率的影响强度,项目越正规、流程越严格,k 越大。
    k>0\displaystyle k > 0
  3. Sigmoid 映射把质量差压缩到 0~1 之间的概率,形成“低分卡住、高分放行”的 S 形曲线。
    P=11+e−k(S−S0)\displaystyle P = \frac{1}{1 + e^{-k(S - S_0)}}

AI 应用场景

场景一:向顶级开源项目提交模型贡献

阶段:协作开发与代码审查(模型发布 / 代码合并)

解决的问题:给 Hugging Face Transformers、PyTorch 等大型开源库提 PR 时,传统方式下描述不全会被维护者打回十几轮。描述中缺少复现实验的配置与指标,审查者无法在本地重训模型验证效果,只能反复追问。

具体案例:一位工程师为 Transformers 贡献新的模型适配器,PR 描述中写明架构改动、在 GLUE 基准上的指标对比表(附 CSV 截图)、复现命令与权重链接。维护者按图索骥,一天之内完成评审并合并。

场景二:团队 Code Review 标准化

阶段:代码评审与持续集成

解决的问题:企业内部 AI 平台团队每周要 review 上百个 PR,描述不清导致评审积压,模型服务上线被阻塞。模板 + 自动化检查能显著压缩沟通成本。

具体案例:某公司启用组织级 PR 模板,并接入一个检查机器人——PR 描述缺少测试说明或截图时自动提醒补充。上线后,平均 Review 往返轮数从 4.2 轮降到 1.6 轮,合并周期缩短 60%。

场景三:LLM 辅助生成 PR 描述初稿

阶段:AI 辅助开发(自动化文档生成)

解决的问题:很多开发者“会写代码但懒得写描述”。用大模型根据 diff 自动生成结构化初稿,再按模板字段人工校对,把填写时间从半小时压到三分钟。

具体案例:开发者执行 git diff main...HEAD | llm 管道,让 ChatGPT 输出包含背景、变更、影响与测试建议的描述初稿,然后人工修正影响范围与验证结果,最后粘贴进 PR 模板提交。

Python 演示

python76 行
#!/usr/bin/env python3"""PR描述质量评估:根据模板字段完成度估算Review往返轮数。""" import re FIELD_PATTERNS = {    "背景与动机": r"背景|动机|为什么|issue|why",    "变更内容": r"变更|改动|变更内容|what",    "影响范围": r"影响|范围|风险|涉及",    "测试说明": r"测试|验证|单测|test",    "自检清单": r"清单|checkbox|- \[[ x]\]",} FIELD_WEIGHTS = {    "背景与动机": 0.25,    "变更内容": 0.30,    "影响范围": 0.20,    "测试说明": 0.15,    "自检清单": 0.10,} GOOD_PR = """## 背景与动机当前登录模块明文存储token,存在安全风险。 ## 变更内容改用AES-256加密方案,新增token_utils加解密工具。 ## 影响范围涉及auth_service.py与登录鉴权接口,无数据库迁移。 ## 测试说明新增12个单测,覆盖加解密与异常分支,全部通过。 ## 自检清单- [x] 通过 lint- [x] 单测全部通过""" BAD_PR = "修了一些bug,改了登录。"  def detect_fields(text):    """返回每个模板字段是否在描述中被覆盖。"""    result = {}    for field, pattern in FIELD_PATTERNS.items():        result[field] = bool(re.search(pattern, text, re.IGNORECASE))    return result  def score_pr(text):    """加权求和得到0到100的质量分。"""    fields = detect_fields(text)    score = sum(        FIELD_WEIGHTS[f] for f, present in fields.items() if present    )    return round(score * 100, 1)  def predict_rounds(score):    """根据质量分估算Review往返轮数。"""    if score >= 80:        return 1    if score >= 50:        return 3    return 5  def main():    for name, text in [("良好PR", GOOD_PR), ("模糊PR", BAD_PR)]:        score = score_pr(text)        rounds = predict_rounds(score)        print("%s:质量分 %.1f,预计Review轮数 %d" % (name, score, rounds))  if __name__ == "__main__":    main()
目的:输入一段 PR 描述文本,自动检测五个模板字段是否齐全,加权打分后预估 Review 需要往返几轮。
  1. FIELD_PATTERNS = {用正则字典定义五个模板字段的识别规则,分别对应背景、变更、影响、测试、清单。
  2. "自检清单": r"清单|checkbox|- \[[ x]\]",这个正则能匹配 Markdown 复选框语法 - [x] 或 - [ ]。
  3. def score_pr(text):汇总命中字段的权重得分,实现正文中的加权求和公式。
  4. score = sum(FIELD_WEIGHTS[f] for f, present in fields.items() if present)加权求和的核心一行,命中即累加权重。
  5. return round(score * 100, 1)把 0~1 的权重和换算成 0~100 的质量分。
  6. if score >= 80:高分描述预计只需 1 轮 Review,直接进入合并快车道。
  7. [("良好PR", GOOD_PR), ("模糊PR", BAD_PR)]用一组完整模板与一行模糊描述做对比演示,输出得分差距。

常见误区

误区我以为 PR 描述主要是给 GitHub 机器人和 CI 流水线读的,只要代码能通过构建检查,描述随便写写或者不写都行。

正解PR 描述首先是写给人类审查者读的。CI 只关心代码是否通过构建与测试,而维护者要在几分钟内理解你几小时的思考。模板存在的意义就是把你的思考压缩成可快速吸收的信息,让审查者把精力花在设计评审上,而不是反复追问“你为什么要这样改”。想象接诊医生不看手术报告就做判断——谁也不敢签字。

为何常见:新手第一次提 PR 时,看到自动化检查亮起绿色通过,容易误以为“能过就行”,忽略了屏幕另一端还坐着一位等待背景信息的人类。

误区我觉得把每一处代码改动、每个思考过程都写进 PR 描述,写得越长越显得认真,审查者会觉得我很负责。

正解臃肿详细的描述和专业描述是两回事。几百行流水账会让审查者抓不住重点,信息密度 D = I/L 中分母 L 过大,有效信息被稀释。好描述用要点、短句、数据和图表,把核心的背景、变更、影响、测试讲清楚,细节交给代码注释与关联文档。手术报告没人会写成回忆录。

为何常见:人们把“努力”与“质量”混为一谈,担心写少了显得不用心,于是用字数堆砌安全感,反而伤害了可读性。

误区截图是给产品经理看的,我是纯前端改动,审查者自己跑一下代码就能看到效果,没必要贴图,太麻烦了。

正解审查者往往同时 review 多个 PR,没有时间和环境为你的改动专门跑一次前端。一张前后对比 + 重点标注的截图,是给审查者的“影像资料”,几秒内就能建立“改对没有”的判断。远程异步协作下截图不是锦上添花,而是降低理解成本的关键证据。

为何常见:开发者在本地打开页面觉得“一切理所当然”,完全忘记了远程审查者既没有你的数据,也没有你的耐心。

误区我花半小时填模板字段,不如多写半小时代码。模板就是大公司病,小团队根本不需要这种东西。

正解模板是典型的“前期一次性投入、后期持续回报”。填模板的半小时换来的是审查者不再发十几条追问、合并周期大幅缩短。站在团队维度,一份模板被使用一百次,就是省下一百次“互相猜谜”的沟通成本。回顾公式 T = R × (t_r + t_a),R 正是靠模板压下来的。

为何常见:人们习惯放大眼前可见的填表成本,却无视持续由低效沟通支付的隐性时间成本,结果捡了芝麻丢了西瓜。

面试题

Q1. PR描述最主要的阅读对象是谁?

单选题 · easy

  • A.编译器与自动化工具
  • B.代码审查者与维护者← 正确答案
  • C.最终应用的软件用户
  • D.数据库集群服务器

答案:B。PR 描述首先服务于人类审查者——维护者需要快速理解改动的背景与风险。编译器、用户与服务器都不阅读 PR 描述,它们只消费代码本身。就像手术报告是给接诊医生看的,不是给 CT 机看的。

Q2. 下列哪项通常是PR模板的核心字段?

单选题 · easy

  • A.背景与动机说明← 正确答案
  • B.服务器IP地址表
  • C.键盘快捷键列表
  • D.显示器分辨率表

答案:A。PR 模板的核心字段包括背景与动机、变更内容、影响范围、测试说明和自检清单,它们围绕“让审查者快速理解改动”展开。服务器 IP、键盘快捷键、显示器分辨率都与此无关。

Q3. PR描述中“影响范围”字段的核心作用是?

单选题 · mid

  • A.记录代码行数的增减
  • B.告知关联模块与风险← 正确答案
  • C.展示开发者的个人经历
  • D.统计仓库的提交次数

答案:B。影响范围告诉审查者这次改动动了哪些模块、是否涉及接口、数据库迁移或外部依赖,帮助判断风险大小。它不关注行数、个人经历或提交次数,这些信息对决策没有帮助。

Q4. 一份合格的测试说明应包含哪些内容?

多选题 · mid

  • A.测试类型与分层覆盖← 正确答案
  • B.场景矩阵与边界情况← 正确答案
  • C.验证结果与通过率← 正确答案
  • D.个人作息与饮食偏好

答案:ABC。测试说明要讲清测试类型(单测/集成/E2E)、覆盖场景(正常、异常、边界)以及验证结果(通过率),这是审查者判断“改对没有”的证据。个人作息与代码验证无关,不应出现。

Q5. 在PR描述中使用"closes #123"的效果是?

单选题 · mid

  • A.合并后自动关闭对应Issue← 正确答案
  • B.自动删除历史分支记录
  • C.提升代码的运行速度
  • D.替换仓库的默认分支

答案:A。closes #123 是 GitHub 的关键字语法,当 PR 被合并时自动关闭编号为 123 的 Issue,形成从问题提出到修复上线的完整闭环。它不删除分支、不加速代码、不替换默认分支。

Q6. 下列哪句描述最符合“数据支撑”的编写原则?

单选题 · hard

  • A.修复了登录超时异常的问题
  • B.登录耗时从850ms降至320ms← 正确答案
  • C.优化了系统的整体性能表现
  • D.改善了用户的整体使用体验

答案:B。“数据支撑”要求用数字替代形容词。B 给出了 850ms 到 320ms 的量化对比,审查者能直接判断效果;A、C、D 都停留在模糊的定性描述,信息密度低,无法支撑决策。

Q7. 关于PR附件的规范,下列说法正确的是?

多选题 · hard

  • A.UI变更应附前后对比图← 正确答案
  • B.截图可以完全替代文字
  • C.关键区域需要加标注← 正确答案
  • D.动图能展示交互过程← 正确答案

答案:ACD。UI 变更附前后对比图、对关键区域做标注、用动图展示交互过程都是正确做法。但截图不能完全替代文字——复杂逻辑、数据迁移等抽象信息仍需要文字说明,两者互补而非替代。

Q8. PR描述中的自检清单主要作用是?

单选题 · easy

  • A.帮助开发者自查避免遗漏← 正确答案
  • B.自动修改有问题的代码
  • C.替代单元测试的执行
  • D.随机生成测试数据记录

答案:A。自检清单是一组勾选项,提醒开发者确认 lint、单测、用例补充等工作已完成,把低级错误拦截在提交前。它不能自动改代码、不能替代测试执行、更不生成数据。

Q9. 结构化PR描述缩短Review周期的根本原因是?

单选题 · hard

  • A.审查者阅读速度成倍提升
  • B.描述降低信息不确定度← 正确答案
  • C.CI工具自动合并代码分支
  • D.服务器算力配置大幅升级

答案:B。模板字段把审查者关心的背景、变更、影响、测试信息固定在确定位置,显著降低了信息不确定度,从而减少追问轮数。阅读速度提升是表象而非根因;CI 不自动合并分支,服务器算力与审查周期无关。

Q10. 关于提交规范与PR流程的关系,正确的是?

多选题 · mid

  • A.feat前缀表示新增特性功能← 正确答案
  • B.提交规范与PR描述没有关联
  • C.规范提交便于历史回溯定位← 正确答案
  • D.PR标题必须复制首个提交标题

答案:AC。Conventional Commits 中 feat: 表示新增功能,规范的提交信息让历史可搜索、可回溯,与 PR 模板相辅相成。提交规范能辅助 PR 描述撰写,并非没有关联;PR 标题也没有“必须复制首个提交标题”的硬性规定。