该技能用于在撰写、重写或审阅 PR/CL 描述、提交信息或代码变更摘要时提供指引,核心是说明“改了什么”和“为什么改”。它的定位是:变更描述属于永久的工程历史,既要让当前评审者理解变更,也要帮助未来的维护者找到并理解它。内容改编自 Google 工程实践文档,特别聚焦其中“Writing good CL descriptions”部分。
用途与目标:好的描述应当回答以下问题——改了什么;为什么改;有哪些从代码中看不出来的上下文、约束或权衡;如何测试;评审者需要知道哪些风险、迁移、回滚或后续工作。即便变更较小,只要原因不明显,也应补充上下文。
首行要求:首行应能独立存在于版本控制历史中;简短、具体,并聚焦于变更做了什么;在提交信息或 CL 标题中使用祈使语气;避免“fix bug”“cleanup”“phase 1”“misc”“add helpers”等含糊标签;若下面有正文,首行后应留一个空行。
正文内容:只应包含有用的上下文,包括待解决的问题、选择该方案的原因、对用户或开发者可见的行为变化、重要实现说明、已知限制或后续工作,以及缺陷编号、issue 链接、基准测试结果、设计文档、迁移文档或发布计划;对于可能日后无法访问的链接,应补充足够的上下文;适当时附上测试命令与结果。提交前应在评审修改后重读描述,确认其仍与最终 diff 一致。
模板:资料给出四类模板。标准 PR 模板包括祈使句一行摘要,以及 Why、What Changed、Testing、Risk / Rollback 四个部分。小型变更模板为一行祈使摘要加一段说明变更缘由与非显而易见上下文的文字,并附 Testing 一行。重构模板描述结构性变更及其替代对象,说明该变更为未来某项变更做准备及具体原因,且不刻意改变行为,并附保护行为的测试。生成或机械性变更模板说明机械重写内容、由何工具/版本/命令生成及原因、是否有手工修改,并附格式/测试/构建验证命令。
重写检查清单:改进已有描述时,从 diff 中提取真实行为;用具体动作替换含糊首行;补上缺失的原因;保留有用的 issue 链接与测试证据;删除对评审者或未来维护者无帮助的流程噪音。
常见错误:只描述实现而不说明原因;标题让未来搜索者无法与类似变更区分;关键上下文完全依赖外部链接;评审显著改变 diff 后描述已过时;因觉得不便而隐瞒风险、限制或发布要求。